以下是一个最小的例子:
library(data.table)
#Create example dt
dt <- as.data.table(matrix(ncol = 20, nrow = 2))
colnames(dt) <- c(paste0("COV", seq(10)), paste0("dum", seq(10)))
mapply(function(i) {eval(parse(text = paste0("dt[, COV", i, ":=as.numeric(COV", i, ")]")))},
seq(10))
sapply(dt, class)
#Create example dt2
dt2 <- matrix(c(seq(10), seq(10)*2), ncol = 10, nrow = 2, byrow = T)
dt2
是2x10,我想将其填入dt[1:2, 1:10]
。
当然,for循环解决方案很简单:
for (i in 1:10) {
dt[, paste0("COV", i)] <- dt2[, i]
}
但我觉得在逃避使用for循环的阶段,似乎非常气馁。
我尝试了其他功能,例如sapply
,mapply
,do.call
,甚至与eval(parse(text = sth))
结合使用。但到目前为止,没有什么能真正奏效。
对我有什么建议吗? 谢谢!
答案 0 :(得分:1)
也许这就是:
dt[1:2,1:10] <- as.data.frame(dt2)