【问题标题】:Exporting elements from list to CSV in R在R中将元素从列表导出到CSV
【发布时间】:2019-02-08 18:52:50
【问题描述】:

我想将 array 类的每个元素从 list 导出到 CSV 文件

示例数据:

mylist <- list(
    specimen1 = array(runif(3^2), dim=c(3,3)),
    specimen2 = array(runif(3^2), dim=c(3,3)),
    specimen3 = array(runif(3^2), dim=c(3,3))
)

我还想将 _land 附加到每个 csv 文件(例如,标本 1_land.csv、标本2_land.csv、标本3_land.csv 等)。

【问题讨论】:

  • 2^3 == 8dim= c(3, 3) 暗示 3*3 == 9 元素:数组的最后一个元素重复第一个元素。
  • @user3683803:当有人回答您的问题时,请考虑投票或接受答案。

标签: arrays r list for-loop


【解决方案1】:

试试这个(Base R 解决方案): 提取索引数据并写入相应的.csv 文件。

for(i in 1:length(mylist)){
  write.csv(mylist[i], paste0(names(mylist)[i], "_land.csv"))
}

【讨论】:

  • sep = ".csv" 是错误的。它将变为"specimen1.csv_land",等等。Upvote,你打败了我。
  • @RuiBarradas:我尝试运行,它运行良好:) 请随时纠正我。
  • 当你有一个不同的sep时,你可能运行了你的代码的第一个版本。
  • paste0(names(mylist[i]),"_land.csv")paste0(names(mylist[i]),"_land",sep=".csv") 都可以工作。
  • 第二个输出:[1] "specimen1_land.csv" [1] "specimen2_land.csv" [1] "specimen3_land.csv"
【解决方案2】:

MASS::write.matrix 如果您只想要值而不是行名或列名,那就太好了。您可以使用lapply 遍历您的列表,或者由于您需要遍历对象和名称,所以它的多变量版本Map

set.seed(47)
mylist <- list(
    specimen1 = array(runif(3^2), dim=c(3,3)),
    specimen2 = array(runif(3^2), dim=c(3,3)),
    specimen3 = array(runif(3^2), dim=c(3,3))
)

Map(
    function(obj, name) MASS::write.matrix(obj, name, sep = ","), 
    mylist,
    paste0(names(mylist), "_land.csv")
)

purrr::imap 是它的快捷版本,它自动迭代元素 .x 和名称 .yiwalk 是同一函数的一个版本,它不会产生任何输出(无论如何这都是无用的,因为您正在调用匿名函数以获得副作用)。

library(purrr)

mylist %>% iwalk(~MASS::write.matrix(.x, paste0(.y, "_land.csv"), sep = ","))

两者都做同样的事情。

【讨论】:

    【解决方案3】:

    您也可以使用mapply 进行操作

    mapply(write.csv, x=mylist, file=sprintf("specimen%i_land.csv", 1:3))
    # edit: alistaire's answer uses Map, which is the same as mapply
    # so the only unique bit here is sprintf
    

    sapply:

    sapply(1:3, function(i) write.csv(mylist[[i]], sprintf("specimen%i_land.csv",i)))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-09-15
      • 2017-07-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-26
      • 2019-11-09
      相关资源
      最近更新 更多