我正在使用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,然后将打印输出/编织html(将每个数据集的结果显示在一起,而不是按顺序显示每个数据集的每个函数输出)。
答案 0 :(得分:3)
您应该返回包含所有输出的结构。最好返回一个命名列表。如果输出具有相同的尺寸,也可以返回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
将最终结果输出到大数据框。或者你可以使用经典:
do.call(rbind,output)
汇总结果。
答案 1 :(得分:2)
函数应始终具有显式返回值,例如
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))
#return value:
list(outputvss, nefa)
})
output
是一个列表清单。