如何同时使用"for循环"和"write.csv"?

4

我有一个数组,其中包含纬度、经度、时间和值。时间从1到300开始计数。下面是时间为1时数组的部分内容。

myarray[,,1]
     lon                        
    lat -124.5  -123.5  -122.5  -121.5  -120.5  -119.5  -118.5
31.5    0   0   0   0   0   0
32.5    0   0   0   0   0   0
33.5    0   0   0   0   0   0
34.5    0   0   0   0   0   0
35.5    0   0   0   0   0   0
36.5    0   0   0   768.1   0   126.2
37.5    0   0   0.2 0   811 212.1
38.5    0   0   3055    0   243.9   243.7
39.5    0   0   1.5 0.1 3   0
40.5    0.1 16.8    4.3 0.5 2.1 0
41.5    0.2 398.6   0.4 1.2 1.6 0
42.5    0   0.1 0.9 0.1 0.7 0

我希望同时使用 "write.csv" 和 "for loop" 读取数组中每个时间步长(1到300)的数据,并将它们存储在具有“i”索引的单独的 .csv 文件中。我使用了以下命令,但似乎没有起作用:
for (i in 1:300)    write.csv(myarray[,,i],"myarray.i.csv")

1
查看?paste以了解如何构造一个字符串,其中i被评估为1到300之间的当前值,而不仅仅是作为字母"i"。 - Frank
5
类似于 paste("myarray", i, "csv", sep = ".") 的代码。 - alexis_laz
3个回答

12

有多种方法可以解决这个问题:

paste('myarray', i, 'csv', sep = '.')
或者:
sprintf('myarray.%d.csv', i)

我更喜欢最后一个。


@PaulHiemestra,sprintf 是首选仅因为其语法更简洁还是还有其他原因? - TheComeOnMan

1
这应该可以正常工作:


n = dim(mydata)[3]

for(i in 1:n) {
  #unpack a 3D array
  mat = mydata[,,i]
  form = sprintf('subject_%s.csv', i)
  write.csv(mat, file = form)

}

0

一个方法是

for (i in 1:300)  {
write.table(myarray[,,i],file=""myarray.i.csv"",append=TRUE,sep=",",col.names=TRUE,row.names=TRUE) 
  }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接