2013-02-23 22 views
1

multicore庫中是否有像sapply這樣的東西?或者我必須unlist(mclapply(..))才能實現這一目標?多核:: sapply?

如果它不存在:推理是什麼?

如果這是一個愚蠢的問題,請提前致謝!

回答

2

如果你看看sapply代碼(和它的輔助功能simplify2array),你會看到unlist(obj)正是將在obj是項目的列表中的所有的length==1的情況下完成的。然而,sapply比僅僅列表清單複雜得多。目前還不清楚的是你正在努力解決什麼問題。

3

在圖書館parallel,你有mcmapply其中,像在basemapply,需要SIMPLIFY說法。默認爲TRUE。下面是一個例子使用:

library(parallel) 
mcmapply(sqrt,split(1:8,1:8)) 
#  1  2  3  4  5  6  7  8 
# 1.000000 1.414214 1.732051 2.000000 2.236068 2.449490 2.645751 2.828427 

比較這對使用mclapply

mclapply(split(1:8,1:8),sqrt) 
# $`1` 
# [1] 1 
# 
# $`2` 
# [1] 1.414214 
# ... 
+0

然而,在某些方面,我同意奇怪的是沒有'mcsapply'。我一直認爲奇怪的是你無法將'SIMPLIFY'參數傳遞給'lapply',但我懷疑這就是爲什麼你無法將'SIMPLIFY'參數傳遞給'mclapply'的原因。 – nograpes 2013-02-23 18:39:10

+0

是不是隻是這種情況下,mclapply正在列表上作用,因此默認情況下返回列表的方式與sapply對載體的作用相同,默認情況下簡化爲true? – russellpierce 2015-12-09 14:25:58

+0

@rpierce實際上'sapply'也在列表中起作用(並且'lapply'也對矢量起作用)。 'sapply'和'lapply'唯一的區別就是返回值的結構。 'lapply'將*總是*返回一個列表,而'sapply'則可能返回一個向量或一個列表。返回值的名稱也不同。我認爲創建一個與'sapply'具有相同行爲的'mcsapply'會很有意義。 – nograpes 2015-12-09 19:28:16