[英]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.