使用 pmap() 進行 3 個以上輸入的資料模擬
如果你需要在 3 個清單上反覆運算呢?有 map3() 嗎?當要同時處理超過 2 個清單時,不論是 3、4,甚至 20 個,都需要使用 pmap()。不過,pmap() 需要用稍微不同的方式提供清單引數。
要使用 pmap(),你必須先建立一個包含所有要迭代之清單的「主清單」(master list)。這個主清單會作為 pmap() 的輸入。呼叫時不要用 .x 或 .y,而是把清單名稱「當作」引數名稱來用。
你將再進行一次資料模擬,這次用 5 個清單作為輸入,而不是 2 個。使用 pmap() 能讓你完全掌控模擬的資料集,並可在不同的據點(sites)下,套用兩個不同的平均數與兩個不同的標準差。
本練習屬於課程
使用 purrr 的函式式程式設計基礎
練習說明
- 建立一個具名清單,內含
sites、means、means2、sigma、sigma2這些清單。 - 對這個「清單的清單」使用
pmap(),建立一個包含 3 欄的資料框清單;第一欄為sites。- 第二欄為
a,其值由rnorm()產生,mean = means,sd = sigma。 - 第三欄為
b,其值由rnorm()產生,mean = means2,sd = sigma2。
- 第二欄為
動手互動練習
試著完成這個範例程式碼,體驗一下這個練習。
# Create a master list, a list of lists
pmapinputs <- list(sites = ___, means = ___, sigma = ___,
means2 = ___, sigma2 = ___)
# Map over the master list
list_of_files_pmap <- pmap(___,
function(___, ___, ___, ___, ___)
data.frame(sites = ___,
a = rnorm(mean = ___, n = 200, sd = ___),
b = rnorm(mean = ___, n = 200, sd = ___)))
list_of_files_pmap