2017-02-12 105 views
0

讓我的腳溼透嗚嗚聲。通過pmap傳遞矢量和單個值的功能

我正在評估beta分佈的參數的不同組合,我試圖傳遞x值的向量和分佈參數。

請參見下面的代碼:

library(tidyr) 
library(purrr) 
library(dplyr) 

x <- seq(0.01, 0.99, 0.01) 
alpha <- c(0.1, 0.5, 1:5, 10) 
beta <- c(0.5, 1, 2, 5) 


df <- expand.grid(alpha = alpha, beta = beta, x = x) %>% 
    nest(x) %>% 
    mutate(plotdata = pmap(list(data$x, alpha, beta), dbeta)) %>% 
    unnest() 

什麼爲PMAP在這種情況下,正確的語法?

回答

0

讓我們以第一個案例爲例。

x = 0.01 
alpha = 0.1 
beta = 0.5 

dbeta(shape1 = alpha, shape2 = beta, x = x) 
# [1] 5.600381 

第二個例子是:

x = 0.01 
alpha = 0.5 
beta = 0.5 

dbeta(shape1 = alpha, shape2 = beta, x = x) 
# [1] 3.199135 

如果這是你期望的輸出,那麼我們就可以概括它:

x <- seq(0.01, 0.99, 0.01) 
alpha <- c(0.1, 0.5, 1:5, 10) 
beta <- c(0.5, 1, 2, 5) 

df <- expand.grid(alpha = alpha, beta = beta, x = x) 

args_beta <- with(df, list(x = x, shape1 = alpha, shape2 = beta)) 
args_beta %>% 
    pmap(dbeta) %>% 
    unlist() %>% 
    as.data.frame() %>% 
    cbind(df, .) 

那麼輸出將是:

alpha beta x   . 
1 0.1 0.5 0.01 5.600381e+00 
2 0.5 0.5 0.01 3.199135e+00 
3 1.0 0.5 0.01 5.025189e-01 
4 2.0 0.5 0.01 7.537784e-03 
5 3.0 0.5 0.01 9.422230e-05 
6 4.0 0.5 0.01 1.099260e-06 
+0

謝謝!但是這並不能給我我需要的東西。 結果應該是包含3168行= length(x)* length(alpha)* length(beta)的數據框 –

+0

如果您花時間回答問題,請進一步解釋它,而不僅僅是幫助OP,同時也幫助其他所有可能訪問相同問題的網頁。請記住,並不是每個人都有相同的背景和理解。你的問題被標記爲「低質量」,請花些時間改進。 – GabrielOshiro

+0

你是依靠你沒有列出的軟件包... – PatrickT