有什么方法可以在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]
那么有什么优雅/有效的方法来解决这个问题
答案 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()
正在执行您在问题中提到的循环。