在 R 中,我通过以下方式创建数据框:
data <- data.frame(dummy=rep('dummy',10000))
data$number = 0
data$another = 1
当我运行一个为数据框分配值的for循环(遍历行)时,我的代码运行得无限慢
calculation <- function() {2}
somethingElse <- function() {3}
system.time(
for (i in 1:10000) {
data[i,2]=calculation()
data[i,3]=somethingElse()
}
)
上面的代码片段在我的笔记本电脑上运行了 20 秒。在 C 或 Java 等其他语言中,这会立即完成。为什么R语言这么慢?我记得读过 R 逐列存储矩阵(例如,与 C 不同,它是逐行存储的)。但是,我仍然对为什么需要这么多时间感到困惑。我的 data.frame 不应该舒适地适合内存(避免缓慢的磁盘写入行为)吗?
作为我的问题的延续,我想要求一种快速的方法来逐行填充我的数据帧,如果存在的话。
编辑:请注意,我并没有尝试将常量 2 和 3 分配给我的数据框,在我试图解决的实际问题中,calculation() 和 somethingElse() 有点复杂,并且取决于另一个数据框。我的问题是关于在循环中有效地插入数据帧(我也很好奇为什么这么慢)。