如何cbind在R中的循环中生成的列

how to cbind the column generated in a loop in R

我有一个 for 循环,它为每个 运行 提供一列数据。我 运行 范围 0:4 中的 for 循环,所以它给了我 5 列。如果我打印出来,就像 column1、column2... 我想将所有 5 列一起保存为一个 csv 文件。在这个单个文件中,我希望按 for 循环的顺序对 5 列进行排序,即 column1、column2、...

假设您有一个这样的 for 循环:

for (i in 0:4) {
  this.column <- rep(i, 5)
}

要根据生成的列构建矩阵,您可以将其更改为:

sapply(0:4, function(i) rep(i, 5))
#      [,1] [,2] [,3] [,4] [,5]
# [1,]    0    1    2    3    4
# [2,]    0    1    2    3    4
# [3,]    0    1    2    3    4
# [4,]    0    1    2    3    4
# [5,]    0    1    2    3    4

基本上,您只需在 for 循环内部创建一个函数,该函数将循环变量(在本例中为 i)作为输入并 returns 列。然后使用循环索引和第一个参数调用 sapply 并将函数作为第二个参数。

完全矢量化的方法可以结合 matrixrep:

matrix(rep(0:4, each=5), nrow=5)
#      [,1] [,2] [,3] [,4] [,5]
# [1,]    0    1    2    3    4
# [2,]    0    1    2    3    4
# [3,]    0    1    2    3    4
# [4,]    0    1    2    3    4
# [5,]    0    1    2    3    4

有很多方法可以实现您所描述的内容。这是一种适用于许多情况的方法。

# start with an empty list
mydata <- list()

# run through your loop, adding each vector to the list
for(i in 1:10){
    # whatever is in your loop
    mydata[[i]] <- # result of this iteration of loop
}

# turn your list into a dataframe
mydf <- data.frame(mydata)

# write dataframe to a file
write.csv(mydf, file="destfile.csv")