Acabo de tener una conversación con compañeros de trabajo sobre esto, y pensamos que valdría la pena ver lo que la gente en tierra SO tenía que decir. Supongamos que tengo una lista con N elementos, donde cada elemento es un vector de longitud X. Supongamos ahora que quería transformarlo en un data.frame. Al igual que con la mayoría de las cosas en R, hay varias maneras de despellejar el gato proverbial, como as.dataframe
, utilizando el paquete plyr, que combina do.call
con cbind
, preasignar el DF y rellenarlo, y otros.¿La lista más eficiente para el método data.frame?
El problema que se presentó fue lo que sucede cuando N o X (en nuestro caso es X) se vuelve extremadamente grande. ¿Existe un método de desollado de un gato notablemente superior cuando la eficiencia (especialmente en términos de memoria) es esencial?
Dejar "probablemente" fuera de la respuesta y es correcto También es correcto si realiza una función utilizando esas llamadas y reemplaza el truco de saber n con un comando de longitud. Su nueva función es más o menos equivalente a data.frame() después de eliminar todas las comprobaciones exhaustivas. Por lo tanto, si está seguro de que está transfiriendo la llamada a la entrada correcta, simplemente haga lo que Josh recomendó para la velocidad. Si no está seguro, data.frame es más seguro y, do.call (data.frame, x)) es el siguiente más rápido (por extraño que parezca). – John
Ver 'plyr :: quickdf' para exactamente esta función. – hadley
@hadley: 'plyr :: quickdf' no proporciona exactamente esta función; a saber, no hace nombres de columnas únicos. 'plyr ::: make_names' solo reemplaza los nombres que faltan y no tiene un' unique = 'arg como' base :: make.names'. –