【问题标题】:subsetting from a fully vectorized function in R?R中完全矢量化函数的子集?
【发布时间】:2017-06-25 03:03:52
【问题描述】:

我写了Vectorized "main" 函数,下面是lists 三个对象:BF10p.valued

我想知道为什么将“main”函数调用保存为像 b 这样的对象(见下文),然后我不能子集 BF10p.value 或 @987654329 @来自b

即运行ma​​in函数后,当我运行时:

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"))

【问题讨论】:

    标签: r list function vectorization integral


    【解决方案1】:

    mapply 默认进行简化。这里的结果被简化为一个矩阵。你可以这样做

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

    虽然可以设置SIMPLIFY = FALSE,但结果是嵌套列表。

    如果你想要一个可以使用$ 的列表/数据框之类的东西,怎么样

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-03-30
      • 1970-01-01
      • 1970-01-01
      • 2023-03-18
      • 1970-01-01
      • 2013-08-27
      • 1970-01-01
      相关资源
      最近更新 更多