【问题标题】:How to call an internal R C function from your own code如何从您自己的代码中调用内部 R C 函数
【发布时间】:2013-06-25 13:42:48
【问题描述】:

我想重用模拟列联表的 stats 包中的 R 代码来计算模拟的 p.value 以进行卡方检验。

查看chisq.test函数源码时,可以看到如下:

 if (simulate.p.value && all(sr > 0) && all(sc > 0)) {
        setMETH()
        tmp <- .Call(C_chisq_sim, sr, sc, B, E)
        STATISTIC <- sum(sort((x - E)^2/E, decreasing = TRUE))
        PARAMETER <- NA
        PVAL <- (1 + sum(tmp >= almost.1 * STATISTIC))/(B + 
            1)
    }

这里有趣的是.Call调用:

tmp <- .Call(C_chisq_sim, sr, sc, B, E)

如果可能的话,我想做的是在我自己的代码中使用这个C_chisq_sim 函数,但我无法做到。如果我尝试:

tmp <- .Call(C_chisq_sim, sr, sc, B, E, PACKAGE="stats")

我收到 C_chisq_sim object not found 错误。如果我尝试:

tmp <- .Call("C_chisq_sim", sr,sc,B,E, PACKAGE="stats") 

我收到一条错误消息,指出入口点不在加载表中。

如果可能的话,我想要一个跨平台的解决方案。

【问题讨论】:

    标签: r


    【解决方案1】:

    我猜这应该可以解决问题:

    tmp <- .Call(stats:::C_chisq_sim, sr, sc, B, E, PACKAGE="stats")
    

    【讨论】:

    • 如果不求助于:::(从而避免 CRAN 的愤怒),这怎么可能?
    • 这帮助我为流行的新式 G 测试创建了一个g.test; Chi^2 测试的替代品。谢谢!
    【解决方案2】:

    您的另一个选择是使用 R 函数 r2dtable(请参阅 documentation)。

    C_chisq_simr2dtable 都使用相同的 AS159 算法。如果您想要其他源代码选项,请参阅reference

    【讨论】:

      猜你喜欢
      • 2011-01-05
      • 2021-03-07
      • 2019-12-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-08-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多