Supongamos que tengo una función que crea marcos de datos. Me gustaría ejecutar esa función con diferentes valores de entrada, y luego rbind los resultados juntos en una trama de datos grande, como a continuación:¿Forzar mapply para devolver una lista?
CreateDataFrame <- function(type="A", n=10, n.true=8) {
data.frame(success=c(rep(TRUE, n.true), rep(FALSE, n - n.true)), type=type)
}
df <- do.call(rbind, lapply(toupper(letters[1:5]), CreateDataFrame))
Mi función CreateDataFrame toma tres argumentos. En el ejemplo anterior, los argumentos segundo y tercero se mantienen constantes. Me gustaría hacer lo mismo que el anterior, pero los argumentos segundo y tercero cambian en cada llamada. Creo que tengo que usar mapply, así:
mapply("CreateDataFrame", type=toupper(letters[1:5]), n=10, n.true=8:4)
Tengo problemas porque mapply no devuelve una lista, lo que me impide correr do.call(rbind, mapply(...))
. ¿Cómo puedo terminar con un único marco de datos, como lo hice en el ejemplo de la parte superior?
Parece que mapply está devolviendo una matriz de listas. Esperaba que devolviera una lista de marcos de datos. ¿Qué debería hacer de manera diferente?
¡Gracias! En retrospectiva, debería haber leído el manual más de cerca. – Adrian
No hay problema. Me llevó un buen rato aprender que cada vez que me encontraba pensando "¿no sería bueno si la función X hiciera Y", había una posibilidad decente de que el creador de la función me hubiera golpeado hasta el pensamiento! –
es tan tonto que simplifica debe estar en capital. Su forma no coincide con las funciones de grupo sapply – adam