按列在R中填充一个空的data.table

时间:2018-07-31 10:50:42

标签: r data.table

有什么方法可以在R中完全填充空的data.table?我必须填写data.table,列由循环中调用的函数给出。我不知道在启动该函数之前将创建多少列或它们的长度,但是我知道所有列的长度都相同。

我的方法是创建一个空的data.table并将其填充到循环中。但这不起作用,因为我无法将列追加到空的data.table或因为我无法正确插入行。检查下面的玩具示例(为简单起见,我们避免使用for气泡)

 f <- someFunction() # just imagine that returns c(1,2,3)

 # this does not work. fails with error msg:  Cannot use := to add columns to a null data.table (no columns), currently
 dt <- data.table()
 dt[, c("b", "c") := list(f(), f())]

 # this actually work. But creates a 0 row data.table which cannot be filled latter
 dt <- data.table(a = numeric() )
 dt[, c("b", "c") := list(numeric(), numeric())]
 dt[, c("b", "c") := list(f(), f())] # no rows are added

 # this workaround works but is ugly as hell 
 dt <- data.table(a = rep(NA, length(f())) )
 dt[, c("b", "c") := list(f(), f())]
 dt[, a := NULL]

那么有什么优雅/有效的方法来解决这个问题

1 个答案:

答案 0 :(得分:1)

您可以使用以下内容:

library("data.table")   

f <- function(x) c(1,2,3)

dt <- as.data.table(lapply(11:13, f))
setnames(dt, c("a", "b", "c"))

lapply()正在执行您在问题中提到的循环。