将循环结果保存为csv表

时间:2017-10-02 12:10:33

标签: r for-loop

我有简单的循环,在每一步生成一个值,我想将所有结果保存为单个表。问题是每一步都会覆盖前一步。

for(i in 1:5){
  x = 3*i
  print(c(i,x))
}

这给出了

  [1] 1 3
  [1] 2 6
  [1] 3 9
  [1] 4 12
  [1] 5 15

现在我创建一个矩阵,然后我将其保存为csv文件,但它只显示循环的最后一步。

results = matrix(c(i,x), ncol = 2)
     [,1] [,2]
[1,]    5   15

write.table(results, file = "Results.csv", col.names=NA, append = T)

如何显示整个结果列表?提前谢谢!

(ps.-我知道之前已经发布了一个类似的问题,例如Write output of R loop to file,但问题非常具体,我没有设法让答案适应我的情况。)

5 个答案:

答案 0 :(得分:3)

您通常可以使用sapply代替for - 循环:

results <- t(sapply(1:5, function(x) c(x, 3*x)))
write.table(results, file="Results.csv", col.names=NA, append=T)

答案 1 :(得分:2)

您的循环仅向控制台打印结果。您创建的矩阵仅依赖于i的单个(和最后一个)值。有很多方法可以做到,但如果你真的想写一个矩阵,那么你需要将它们存储在某个地方以导出所有迭代中间结果。您可以尝试以下方式:

results <- matrix(NA, nrow=5, ncol=2)
for(i in 1:5){
  results[i, ] <- c(i, 3*i)
}
write.table(results, file = "Results.csv", col.names=NA, append = T)

顺便说一下,你真的不需要循环:

i <- 1:5
m <- matrix(c(i, 3*i), nrow=5)

可以胜任。

答案 2 :(得分:0)

假设您确实需要/需要for - 循环

1)将所有结果存储到矩阵中,然后将整个矩阵写入文件

n = 5;
results = matrix(NA, ncol=2, nrow=n);

for(i in 1:n) {
    results[i, ] = c(i, x);
}

write.table(results, file = "Results.csv", col.names=NA, append = T);

如果您没有很多结果并且只想访问该文件一次,这是一个“好”的解决方案。

2)您只将当前结果存储到矩阵中,并在每次迭代时写入文件

n = 5;

for(i in 1:n) {
    results = matrix(c(i,x), ncol = 2)
    write.table(results, file = "Results.csv", col.names=NA, append = T);
}

如果您有许多数据和内存限制,这是一个“好”的解决方案。可能比前一个慢,因为你会多次打开文件......

答案 3 :(得分:0)

要使用矩阵附加,您可以使用:

exampleMatrix <- matrix(ncol = 2)

for(i in 1:5){
  x = 3*i

  if(i ==1){
    exampleMatrix<- rbind(c(x,i))
  }else{
  exampleMatrix<- rbind(exampleMatrix,c(x,i)) 
}}

要使用循环附加到数据框,您可以使用以下内容:

exampleDF <- data.frame()

for(i in 1:5){
  x = 3*i
  exampleDF <- rbind(exampleDF,c(x,i)) 
}


write.csv(exampleDF, "C:\\path")

答案 4 :(得分:-1)

因此,当您想在使用循环时存储值时,索引很重要。下面,我创建了一些代码,其中a(迭代)和x(值x * 3)都存储在向量中。

循环结束后,我将两个向量合并为一个具有cbind()函数的数据框

a <- vector()
x <- vector()

for(i in 1:5){
  a[i] = i
  x[i] = 3*i
}

df <- as.data.frame(cbind(a, x))

还有其他方法可以在没有循环的情况下执行此操作。一旦开始提高迭代次数或执行嵌套循环,处理时间就会变得非常高。其他选项位于apply package

希望这有帮助!