0

有没有办法在一次调用 lapply 时打印以归档 ddply 的结果和 dfs 列表?

示例 df

m<-rep(c("a1","a2","a3","b1","b2","b3","c1","c2","c3"),2)
n<-rep(c(rep(letters[1],3),rep(letters[2],3),rep(letters[3],3)),2)
o<-rep(c("2009","2010"),9)
p<-c(rep("width",9),rep("depth",9))
r<-c(sample((100:200),9),sample((20:50),9))
s<-data.frame(m,n,o,p,r)
colnames(s)<-c("event","site","year","metric","value")
s

u<-split(s,s$year) 

此功能分两步正常工作:

w<-      lapply(u,function(x) { 
             v<-ddply(x,.(metric),
                  summarize, result_var_all=var(value))

                  })

sapply(names(w), function(x){ write.csv(w[x],file=paste(x,'.csv'))})

但是是否可以将这些步骤结合起来,更像是:

lapply(u,function(x) { 
             v<-ddply(x,.(metric),
                  summarize, result_var_all=var(value))

                  write.table(v,file=paste(names(u[x]),'.csv'))})

这是行不通的。我想我明白为什么,如果 x 是一个新列表。Subbing names(x[1]) for u[x] 确实运行,但将第一个字段名称写入文件标题,看起来它只生成一个输出文件,而不是按年份拆分输出文件。

混合dfs和列表的问题是给定的

names(u)
names(u[1])

x 没有名字吗?

4

1 回答 1

1

是的,这是有效的方式R

解决方案是使用Mapnames()(正如您在部分问题中所做的那样)

地图

Map(names(u), u, f = function(xn,x)  {
        v <- ddply(x, .(metric),summarize, result_var_all=var(value))
        write.csv(v, file = sprintf('%s.csv',xn))
        v})

lapply + 名字

lapply(names(u), FUN = function(xn,x)  {
        v <- ddply(x[[xn]], .(metric),summarize, result_var_all=var(value))
        write.csv(v, file = sprintf('%s.csv',xn))
        v}, x = u)
于 2015-02-20T00:02:20.920 回答