[R-es] Trabajar con un argumento opcional como escalar o vector.
Hola, Al final encontré una posible solución. La reseño aquà por si le sirve a alguien más. Gracias. Emilio library(xkcd) ?doforeachrow
On Tuesday, April 30 2013, 21:37:36, Carlos J. Gil Bellosta <cgb en datanalytics.com> wrote:
Pues entonces igual puedes pegar temporalmente ese vector de parámetros en la tabla de entrada (con cbind) y pasarle a tu función el valor de esa columna fila a fila como un argumento --atómico ya-- más. Un saludo, Carlos J. Gil Bellosta http://www.datanalytics.com El dÃa 30 de abril de 2013 20:36, Emilio Torres Manzanera <torres en uniovi.es> escribió:
SÃ On Tuesday, April 30 2013, 19:44:58, Carlos J. Gil Bellosta <cgb en datanalytics.com> wrote:
¿El vector de argumentos es igual de largo que la tabla? Un saludo, Carlos J. Gil Bellosta http://www.datanalytics.com El dÃa 30 de abril de 2013 19:13, Emilio Torres Manzanera <torres en uniovi.es> escribió:
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
_______________________________________________ R-help-es mailing list R-help-es en r-project.org https://stat.ethz.ch/mailman/listinfo/r-help-es
-- ================================================= Emilio Torres Manzanera Fac. de Comercio - Universidad de Oviedo c/ Luis Moya 261, E-33203 Gijón (Spain) Tel. 985 182 197 email: torres en uniovi.es =================================================
================================================= Emilio Torres Manzanera Fac. de Comercio - Universidad de Oviedo c/ Luis Moya 261, E-33203 Gijón (Spain) Tel. 985 182 197 email: torres en uniovi.es