2017-06-25 49 views
1

我寫了Vectorize d 「主」功能下面list的三個對象:BF10,p.valued從R中的完全矢量化函數子集?

我不知道節約「主」函數調用像b對象(見下文)時,那麼,爲什麼我不能子集BF10,從bp.valued

也就是說,運行主要功能後,當我當我運行:

b = BF.d.pvalue(t = c(2.46, 3.21), n1 = c(20, 30), n2 = c(20, NA)) 
b$BF10 ; b$p.value ; b$d ## None of these return anything !!! 

這裏是 「主要」 功能:

BF.d.pvalue = Vectorize(function(t, n1, n2 = NA, scale = sqrt(2)/2){ 

     options(warn = -1) 
     N = ifelse(is.na(n2), n1, (n1*n2)/(n1+n2)) 
    df = ifelse(is.na(n2), n1 - 1, (n1 + n2) - 2) 
     d = t/sqrt(N) 

    H1 = integrate(function(delta)dcauchy(delta, 0, scale)*dt(t, df, delta*sqrt(N)), -Inf, Inf)[[1]] 
    H0 = dt(t, df) 
    BF10 = H1/H0 
p.value = 2*(1-pt(abs(t), df)) 

cbind(BF10 = BF10, p.value = p.value, d = d) 

}, vectorize.args = c("t", "n1", "n2", "scale")) 

回答

1

mapply默認完成了簡化。這裏的結果已經簡化爲一個矩陣。你可以做

b["BF10", ] 
b["p.value", ] 
b["d", ] 

雖然你可以設置SIMPLIFY = FALSE,但結果是一個嵌套列表。

如果你想要的東西就像一個列表/數據幀在那裏你可以使用$,怎麼樣

b <- data.frame(t(b))