【问题标题】:Try to Export Several CSV's without using separate code for each one尝试导出多个 CSV,而不为每个 CSV 使用单独的代码
【发布时间】:2016-07-01 08:29:37
【问题描述】:

我有许多名称相似的矩阵。这些矩阵是需要数小时才能运行的模拟结果。我希望能够保留这些模拟结果,以便进行分析。我不想为了再次生成结果而每天都运行模拟来继续我的分析。因此,我决定将每个矩阵导出为 csv。但是,我希望有一种简单的方法可以将我的所有矩阵导出为单独的 csv,而不是一遍又一遍地输入此代码

write.csv(mymatrix1, file="mymatrix1")

矩阵名称可能与可能的解决方案有关。每个矩阵都以“样本”开头。句号之后是一个唯一编号。

我在考虑某种循环,或者可能使用通配符?我不知道...谢谢!

【问题讨论】:

  • mymatrix1里面是什么

标签: r csv matrix


【解决方案1】:

只需使用getfor 循环来保存它们

for (i in 1:num_samples)
    write.csv(get(paste0('sample.',i)),file=paste0('mymatrix',i))

【讨论】:

    【解决方案2】:

    正如您所说,您可以循环执行您想要的任务。这是一个小例子:

     sample.1<-matrix(0,ncol=10,nrow=10)
     sample.2<-matrix(0,ncol=10,nrow=10)
     sample.3<-matrix(0,ncol=10,nrow=10)
    
    
    
     for( i in 1:3){
    
       matname<-paste0("sample.",i)
       write.csv(get(matname),file=paste0(matname,".csv"))
    
    }
    

    【讨论】:

      【解决方案3】:

      您可以使用sprintf 函数构造名称。那么这只是获取对象的问题。

      my.obj <- sprintf("sample%s", i) # i would be a variable you can control
      write.csv(get(my.obj), file = paste(my.obj, ".csv", sep = ""))
      

      【讨论】:

        【解决方案4】:

        如果矩阵都在 R 中:

        for(i in ls(pattern="sample.")) {
            write.csv(i, file=paste(i,".csv",sep=""))
        }
        

        【讨论】:

        • 谢谢。这似乎是最简单、最直接的方法。
        • 有没有办法在 write.csv 命令中为“i”添加一些字符。例如,如果 i = sample21,并且我希望在将其写入为 csv 时将其命名为 sample21rocks,我将如何更改 write.csv 命令来执行此操作?
        • 您可以更改中间行以在paste 命令中包含您喜欢的任何内容,例如:write.csv(i, file=paste(i,".rocks.csv",sep="")) 将给您“sample.21.rocks.csv”。
        【解决方案5】:

        如果你有你的文件名,你可以把它们放在一个向量中,然后调用 sapply 以递归调用 write.csv。

        names <- c(a, b, c)
        
        sapply(names, function(x) write.csv(x, file=as.character(x)))
        

        【讨论】:

          猜你喜欢
          • 2013-03-15
          • 2018-02-21
          • 2019-05-12
          • 1970-01-01
          • 2019-07-28
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多