gpt4 book ai didi

r - 循环动态填充数据框R

转载 作者:行者123 更新时间:2023-12-03 22:57:52 27 4
gpt4 key购买 nike

我正在运行一个 for 循环来动态填充一个数据框(我知道一个婴儿海豹死在某个地方,因为我使用了一个 for 循环)

我有这样的想法(5 是返回标量的函数的占位符):

results<-data.frame(matrix(NA, nrow = length(seq(1:10)), ncol = 
length(seq(1:10))))
rows<-data.frame(matrix(NA, nrow = 1, ncol = 1))
for (j in seq(1:10)){
rows<-data.frame()
for (i in seq(1:10)){
rows<-cbind(rows,5)
}
results<-cbind(results,rows)
}

我使用上面的方法收到以下错误消息。
Error in match.names(clabs, names(xi)) : 
names do not match previous names

有没有更简单的方法?

最佳答案

使用 for 循环动态填充对象很好 - 导致问题的是当您使用 for 循环动态构建对象时(例如使用 cbindrbind 行)。

当您动态构建某些东西时,R 必须在每个循环中为对象请求新内存,因为它的大小不断增加。随着对象变大,这会导致 for 循环在每次迭代时减慢。

当您预先创建对象(例如 data.frame 具有正确的行数和列数)并按索引填充它时,for 循环不存在此问题。

要记住的最后一件事是对于 data.frames (和 matrices )每一列都作为一个向量存储在内存中——因此一次将它们填充到一列中通常更有效。

考虑到所有这些,我们可以按如下方式修改您的代码:

results <- data.frame(matrix(NA, nrow = length(seq(1:10)), 
ncol = length(seq(1:10))))
for (rowIdx in 1:nrow(results)) {
for (colIdx in 1:ncol(results)) {
results[rowIdx, colIdx] <- 5 # or whatever value you want here
}
}

关于r - 循环动态填充数据框R,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49500364/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com