[R-es] Trabajar con un argumento opcional como escalar o vector.
Emilio Torres Manzanera
torres en uniovi.es
Mar Abr 30 19:13:26 CEST 2013
Estimada Lista,
Deseo aplicar una función a cada fila de un data frame con un argumento opcional.
En la función orginal, el argumento opcional debería poder ser escalar o vector.
Necesito definir una función 'aplicaratodasfilas' que llama a otra función 'atomica' que no admite vectores y que requiere también argumentos opcionales.
Pongo un ejemplo:
# Se aplica a cada fila.
atomica <- function(xbegin, xend, npoints = 5, ...) { # los argumentos opcionales ... son necesarios ya que hay más funciones dentro
seq(xbegin,xend,length.out = npoints) # la función seq no admite vectores
}
aplicaratodaslasfilas <- function(data, ...) {
lapply(1:dim(data)[1], function(i,...) {
atomica(xbegin=data[i,1], xend=data[i,2], ...)
}, ... = ...
)
}
data <- data.frame(xbegin=c(1:2),xend=c(11:12))
aplicaratodaslasfilas(data=data) # FUNCIONA
## [[1]]
## [1] 1.0 3.5 6.0 8.5 11.0
## [[2]]
## [1] 2.0 4.5 7.0 9.5 12.0
aplicaratodaslasfilas(data=data, npoints = 3) # FUNCIONA
## [[1]]
## [1] 1 6 11
## [[2]]
## [1] 2 7 12
aplicaratodaslasfilas(data=data, npoints = c(3,5)) # NO FUNCIONA
# Me gustaría obtener
## [[1]]
## [1] 1 6 11
## [[2]]
## [1] 2.0 4.5 7.0 9.5 12.0
¿Alguien sabría definir la función aplicaracadafila de tal forma que funcione en estos casos?
aplicaratodaslasfilas(data=data)
aplicaratodaslasfilas(data=data, npoints = 3)
aplicaratodaslasfilas(data=data, npoints = c(3,5))
Gracias
Emilio
Más información sobre la lista de distribución R-help-es