Экспорт элементов из списка в CSV в R - PullRequest
0 голосов
/ 03 сентября 2018

Я хотел бы экспортировать каждый элемент класса 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-файлу (например, specimen1_land.csv, specimen2_land.csv, specimen3_land.csv и т. Д.).

Ответы [ 3 ]

0 голосов
/ 03 сентября 2018

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 = ","))

Оба делают одно и то же.

0 голосов
/ 03 сентября 2018

Вы также можете сделать это с 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)))
0 голосов
/ 03 сентября 2018

Попробуйте это (решение Base R): Извлеките индексные данные и запишите в соответствующий файл .csv.

for(i in 1:length(mylist)){
  write.csv(mylist[i], paste0(names(mylist)[i], "_land.csv"))
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...