R 使用多个函数存储 lappy 的输出

标签 r apply lapply

我正在使用 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/

相关文章:

javascript - 使用 .apply( ) 并传递相同的实例作为上下文是否有意义?

r - 使用 lapply 拟合多个模型——如何在 lm 对象中保持模型公式自包含

r - 为 `<<-` 定义时 `x < y <- z` 的歧义

r - 如何打破排名中存在差距的平局

r - R不知道时间是循环的吗?如何找到一天中最接近给定时间的时间

r - c将两个 data.frames 列表绑定(bind)到一个新列表

r - 向大型 (16Mill) 列表的所有元素添加一些字符串(可能是关于应用语法的问题)

r - 使用 svm 时绘图错误、公式丢失

scala - Scala 中的伴生对象未将自身与案例类关联

javascript - 为什么我应该调用 Function.prototype.apply.call(x, ...) 而不是 x.apply(...)?