这个问题说明了一切 - 我想要一个充满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 = ",")})
Run Code Online (Sandbox Code Playgroud)
这是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
Run Code Online (Sandbox Code Playgroud)
我在这里错过了什么?
42-*_*42- 21
试试这个:
sapply(names(df.daily),
function (x) write.table(df.daily[[x]], file=paste(x, "txt", sep=".") ) )
Run Code Online (Sandbox Code Playgroud)
您应该看到名称("1","2","3")逐个吐出,但NULL表示写入磁盘文件的副作用已完成.(编辑:将[]更改为[[]].)
你可以使用mapply:
mapply(
write.table,
x=df.daily, file=paste(names(df.daily), "txt", sep="."),
MoreArgs=list(row.names=FALSE, sep=",")
)
Run Code Online (Sandbox Code Playgroud)
有几件事:
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))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
13420 次 |
| 最近记录: |