Подтвердить что ты не робот

Напишите список файлов данных для разделения файлов CSV с использованием

В этом вопросе говорится все: я хочу взять объект списка, полный data.frames, и записать каждый файл data.frame в отдельный CSV файл, где имя файла .csv соответствует имени объекта списка.

Здесь воспроизводимый пример и код, который я написал до сих пор.

df <- data.frame(
    var1 = sample(1:10, 6, replace = TRUE)
    , var2 = sample(LETTERS[1:2], 6, replace = TRUE)
    , theday = c(1,1,2,2,3,3)
)

df.daily <- split(df, df$theday) #Split into separate days

lapply(df.daily, function(x){write.table(x, file = paste(names(x), ".csv", sep = ""), row.names = FALSE, sep = ",")})

И вот верхняя часть сообщения об ошибке, которое R выплевывает

Error: Results must have one or more dimensions.
In addition: Warning messages:
1: In if (file == "") file <- stdout() else if (is.character(file)) { :
  the condition has length > 1 and only the first element will be used

Что мне здесь не хватает?

4b9b3361

Ответ 1

Попробуйте следующее:

sapply(names(df.daily), 
 function (x) write.table(df.daily[[x]], file=paste(x, "txt", sep=".") )   )

Вы должны видеть, что имена ( "1", "2", "3" ) выходят один за другим, но NULL являются доказательством того, что побочный эффект записи на файлы диска был выполнен. (Изменить: сменил [] на [[]].)

Ответ 3

Несколько вещей:

laply выполняет операции над списком. То, что вы ищете, это d_ply. И вам не нужно ломать его день за днем, вы можете позволить plyr сделать это за вас. Кроме того, я бы не использовал имена (x), поскольку возвращает все имена столбцов data.frame.

d_ply(df, .(theday), function(x) write.csv(x, file=paste(x$theday,".csv",sep=""),row.names=F))