簡體   English   中英

在R中將元素從列表導出到CSV

[英]Exporting elements from list to CSV in R

我想將類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文件中(例如,sample1_land.csv,sample2_land.csv,sample3_land.csv等)。

嘗試以下操作(Base R解決方案):提取明智的索引數據並將其寫入相應的.csv文件。

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

如果只需要值而不是行名或列名,那么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和名稱.y iwalk是不產生任何輸出的同一函數的版本(無論如何,這都是無用的,因為您要為副作用調用匿名函數)。

library(purrr)

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

兩者都做同樣的事情。

您也可以使用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)))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM