【问题标题】:Using R package pmultinom with PyRserve将 R 包 pmultinom 与 PyRserve 一起使用
【发布时间】:2020-10-31 16:40:53
【问题描述】:

我正在尝试通过使用 pyRserve 在 Python 中使用 R 包 pmultinom,并将数字导入到代码中。我遇到以下错误:

REvalError:错误:找不到对象“pmultinom”。

import pyRserve
num1 = 1
num2 = 2
num3 = 3
num4 = 4
num5 = 5
num6 = 6
vec1 = (.2,.3,.5)

r_script = '''
           install.packages(pmultinom)
           library(pmultinom)
        
           pmultinom(
           '''
full_rscript =( r_script + 'lower=c(' + str(num1) + ',' + str(num2) + ',' + str(num3) + 
                               '), upper=c(' + str(num4) + ',' + str(num5) + ',' +  
                                   str(num6) + 
                                   '), size=' + str(num7) + ', probs=' + str(vec1) + ')'
           )
output = conn.eval(full_rscript) 

当我尝试使用类似的代码时

conn.r.pmultinom(…)

我收到一个找不到函数的错误。

【问题讨论】:

    标签: python r rserve pyrserve


    【解决方案1】:

    这是pyper 的一个选项,因为我们已在生产环境中使用它,并且它可以正常工作

    from pyper import *
    r = R(use_pandas=True)
    num1 = 1
    num2 = 2
    num3 = 3
    num4 = 4
    num5 = 5
    num6 = 6
    num7 = 20000
    vec1 = (.17649, .17542, .15276, .15184, .17227, .17122)
    

    我们不需要创建单独的对象,它可以是列表或元组,如vec1。只是为了演示

    r.assign("rnum1", num1)
    r.assign("rnum2", num2)
    r.assign("rnum3", num3)
    r.assign("rnum4", num4)
    r.assign("rnum5", num5)
    r.assign("rnum6", num6)
    r.assign("rnum7", num7)
    r.assign("rvec1", vec1)
    

    创建表达式

    expr = "library(pmultinom); out <- pmultinom(lower = c(rnum1, rnum2, rnum3, rnum4, rnum5, rnum6), upper = rep.int(3630, 6), size = rnum7, probs = rvec1, method = 'exact')"
    

    计算表达式并得到输出

    r(expr)
    r.get("out")
    #0.95663799758361
    

    -直接从 R 端测试

    num1 = 1
    num2 = 2
    num3 = 3
    num4 = 4
    num5 = 5
    num6 = 6
    num7 = 20000
    vec1 = c(.17649, .17542, .15276, .15184, .17227, .17122)
    
    
    pmultinom(lower = c(num1, num2, num3, num4, num5, num6), 
      upper = rep.int(3630, 6), size = num7, probs = vec1, 
           method = 'exact')
    #[1] 0.956638
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-12-16
      • 2016-09-08
      • 1970-01-01
      • 2012-06-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-15
      相关资源
      最近更新 更多