2017-02-14 63 views
0

我在R原型中創建一個應用程序。我使用並行庫和parApply在數據框的列上運行函數。我知道這也適用於非並行/應用程序的應用程序。我具有類似於行:以R編程解包列表

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) 
+2

嘗試'mymeans < - sapply(myBigList,\'[[\', 「指」)'其中 「的意思是」 是要抽取的每個子列表中元素的名稱 –

+0

謝謝, 對於具有單個值的列表中的項目,將返回具有適當名稱的向量。正是我想要的。 對於我列表中的項目包含向量,這將返回一個向量列表,同樣非常可以接受。 但是對於列表中包含劇情句柄(可能不是正確的術語)的項目,它將返回一個矩陣。我似乎無法弄清楚如何從這個地方再現這些情節。 – Lespied

+0

這就是爲什麼你應該提供一個最小的可重複的例子。雖然您確實展示了一些代碼,但它不允許用戶實際測試/運行它。例如,你可以顯示一行如'x < - list(col1 = list(mean = 1,sd = 2),col2 = list(mean = 1,sd = 2),col3 = list(mean = 1, sd = 2))'或一個包括圖和data.frames。然後,有人會告訴你如何做到這一點 –

回答

1

從@docendo discusimus評論

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

返回意味着所有的值存儲的載體。要返回的列表,其是用於存儲繪圖類有用的命令應該是:

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