在R

时间:2017-02-14 09:48:51

标签: r list apply

我在R中对应用程序进行原型设计。我使用并行库和parApply在数据帧的列上运行函数。据我所知,这也适用于非并行/应用程序。我有一行类似于:

myBigList <- parApply(myCluster, myInputData, 2, myFunction)

其中myFunction是我写的一个,它将一个向量作为输入。该功能本身执行了很多我无法进行的操作。它返回各种类的变量列表。出于MWE的目的,请说:

myFunction <- function(vectorIn){
    # CODE GOES HERE
    return(list(
        mean = mean(vectorIn),
        sd = mean(vectorIn),
        vectorOut = sumUserFunction(vectorIn),
        plot1 = aPlotGeneratingFunction(vectorIn),
    ))

返回给我的是一个包含该函数结果的列表。我可以从列表中寻址元素,例如:

myBigList$Column1$mean

但这对我的目的并没有多大帮助。我想知道如何解压缩列表,以便查看所有平均值。例如:

listOfMeans <- myBigList$*ALL_ITEMS*$mean

这样listOfMeans是一个带有row.names的向量,或者是带有col.names的data.frame。

这可能吗?我可以想到使用for循环的解决方案但看起来并不优雅。

我也想做一些类似于我返回的情节的东西,这样我就可以自动构建一个包含所有这些图的pdf。我猜测学习上述内容会有所帮助。

tl; dr:从列表中提取公共数据名称的最佳方法是什么?

编辑:一个实际的MWE

library('ggplot2')

exampleData <- data.frame(Col1 = rnorm(100), Col2 = rnorm(100), Col3 = rnorm(100))

myFunction <- function(xIn){

  meanX <- mean(xIn)
  sdX <- sd(xIn)
  vecX <- xIn^2 + xIn

  plotX <- 
    ggplot(data.frame(xIn, vecX), aes(x = xIn, y = vecX)) +
    geom_point()

  return(list(
    mean = meanX,
    sd = sdX,
    vect = vecX,
    plot = plotX
  ))
}

myBigList <- apply(exampleData,
                   2,
                   myFunction)

1 个答案:

答案 0 :(得分:1)

来自@ docendo discusimus评论

mymeans <- sapply(myBigList, '[[', 'mean')

返回所有值存储的向量。要返回一个列表,这对于存储绘图类很有用,命令应该是:

myplots <- lapply(myBigList, '[[', 'plot')