我正在使用 lapply 循环访问数据帧列表并应用相同的函数集。当 lapply 只有一个函数时,这工作得很好,但我很难了解如何存储/打印多个函数的输出 - 在这种情况下,我似乎只能从一个“循环”获取输出。
所以这个:
output <- lapply(dflis,function(lismember) vss(ISEQData,n=9,rotate="oblimin",diagonal=F,fm="ml"))
有效,但以下无效:
output <- lapply(dflis,function(lismember){
outputvss <- vss(lismember,n=9,rotate="oblimin",diagonal=F,fm="ml")
nefa <- (EFA.Comp.Data(Data=lismember, F.Max=9, Graph=T))
})
我认为这个虚拟示例是一个类比,所以换句话说:
nbs <- list(1==1,2==2,3==3,4==4)
nbsout <- lapply(nbs,function(x) length(x))
给了我一些我可以访问的东西,但我看不到如何使用以下内容存储输出(例如尝试使用 nbsout[[x]][2]):
nbs <- list(1==1,2==2,3==3,4==4)
nbsout <- lapply(nbs,function(x){
nbsout[[x]][1]<-typeof(x)
nbsout[[x]][2]<-length(x)
}
)
我正在使用 RStudio,然后将打印输出/knitting html(将每个数据集的结果一起显示是有意义的,而不是按顺序显示每个数据集的每个函数输出)。
最佳答案
您应该返回一个包含所有输出的结构。最好返回一个命名列表。如果您的输出具有相同的尺寸,您还可以返回 data.frame。
otutput <- lapply(dflis,function(lismember){
outputvss <- vss(lismember,n=9,rotate="oblimin",diagonal=F,fm="ml")
nefa <- (EFA.Comp.Data(Data=lismember, F.Max=9, Graph=T))
list(outputvss=outputvss,nefa=nefa)
## or data.frame(outputvss=outputvss,nefa=nefa)
})
当您返回 data.frame 时,您可以使用 sapply
简单地将最终结果输出到大 data.frame。或者你可以使用经典的:
do.call(rbind,output)
聚合结果。
关于R 使用多个函数存储 lappy 的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27887582/