una - Cómo inicializar el marco de datos vacío(lote de columnas al mismo tiempo) en R
extraer una columna de una tabla en r (2)
Encontré cómo inicializar un marco de datos vacío con 3 o 4 dimensiones. Es como
df <- data.frame(Date=as.Date(character()),
File=character(),
User=numeric(),
stringsAsFactors=FALSE)
Sin embargo, ¿cuál es la forma más efectiva de inicializar un data.frame vacío con muchos nombres de columna? me gusta
mynames <- paste("hello", c(1:10000))
La manera incorrecta que probé es:
df <- data.frame(mynames=numeric())
Muchas gracias de antemano
Haría esto usando setDF
(o setDT
, si prefieres data.table
como salida) y setnames
:
library(data.table)
DF <- setnames(setDF(lapply(integer(1e4), function(...) character(0L))),
paste0("hello", 1:1e4))
head(names(DF))
# [1] "hello1" "hello2" "hello3" "hello4" "hello5" "hello6"
Ambos pasos ( setnames
y setDF
) son más eficientes que las contrapartes base
, ya que no se realizan copias.
Un punto de referencia:
library(microbenchmark)
microbenchmark(times = 1000,
base = {df <- data.frame(matrix(ncol = 10000, nrow = 0))
colnames(df) <- paste0("hello", c(1:10000))},
DT = setnames(setDF(lapply(integer(1e4),
function(...) character(0L))),
paste0("hello", 1:1e4)))
# Unit: milliseconds
# expr min lq mean median uq max neval cld
# base 26.77218 30.94223 37.30173 36.76721 37.80338 102.2379 1000 b
# DT 16.68004 23.18865 30.60573 29.18421 36.03590 178.1045 1000 a
Tal vez esto -
df <- data.frame(matrix(ncol = 10000, nrow = 0))
colnames(df) <- paste0("hello", c(1:10000))
Y la sugerencia de @ joran - df <- setNames(data.frame(matrix(ncol = 10000, nrow = 0)),paste0("hello", c(1:10000)))