将函数应用于R中的数据帧列表

时间:2016-08-26 10:04:31

标签: r

我想将acast()应用于数据框列表并返回新的矩阵列表。

list<-list(df1 = data.frame(vegspecies=c("vsp1", "vsp1", "vsp1", "vsp2", 
  "vsp2", "vsp2"), species=c("sp1", "sp1", "sp1", "sp2", "sp2", "sp2"), 
       her=c(0,0,1,0,3,2)), df2 = data.frame(vegspecies="", species="", her=""))

对于单个数据框,该功能正常。

acast(list$df1, vegspecies ~ species, fill=0)

鉴于我的列表还包含空数据帧,我使用tryCatch()忽略错误并检索NULL元素。这似乎也很好。

tryCatch(acast(list$df2, vegspecies ~ species, fill=0), error=function(e) print(NULL))

但是我无法在整个数据框列表中应用它。理想情况下,输出应该是矩阵列表(那些矩阵将具有不同的大小)。我认为错误是我首先创建空列表的方式,但我无法修复它。

wideData <- list(df1 = matrix(), df2 = matrix())

for(i in 1:length(list)){wideData[i] <- tryCatch(acast(list[[i]], vegspecies ~ species, fill=0), error=function(e) print(NULL))}

1 个答案:

答案 0 :(得分:0)

我们可以使用lapply遍历'{1}}'data.frame list acast`(假设'df2'也是与'df1'相同的数据集,具有相同的列名称,类型等。)

s and apply the

注意:最好不要将res <- lapply(lst, function(x) acast(x, vegspecies ~ species, fill=0)) 对象“列表”命名为(类似地将list命名为“vector”或将vector命名为“data.frame”)。它可以是任何其他名称。

但是,我们仍然可以在单个data.frame上使用单个data.frame acast rbind对象和'id'列来标识lst元件

list