比较rpy2中的方法

问题描述 投票:0回答:1

我有一个rpy2脚本。

from rpy2.robjects.packages import importr
binom = importr('binom')
from rpy2 import robjects

robjects.r('''library(binom)
p = seq(0,1,.01)
coverage = binom.coverage(p, 10, method="bayes", type = "central")$coverage
''')

我想用它来比较一系列方法的结果,请。

methods = [("bayes", type = "central"),("asymptotic")]

for method in methods:
    robjects.globalenv["method"] = robjects.r(method)
    robjects.r('''library(binom)
    p = seq(0,1,0.01)
    coverage = binom.coverage(p, 10, method=method)$coverage
    ''')

第一行给我的是:

invalid syntax

我想在贝叶斯方法中加入 "类型",但当我放弃这个来获取列表中的语法时,我还是得到了错误的信息。

object 'bayes' not found 
python list for-loop rpy2
1个回答
1
投票

robjects.r() 接收一个字符串,所以对于这个特殊的任务,你可以只用正确的字符串替换单词方法。使用两个引号(单引号和双引号)就可以了,因为 .replace() 将抛弃外引号并替换文本,保留单引号。

from rpy2.robjects.packages import importr
binom = importr('binom')
from rpy2 import robjects

methods = ["'bayes', type='central'","'asymptotic'"]
for method in methods:
    r_string = """library(binom)
    p = seq(0,1,0.01)
    coverage = binom.coverage(p, 10, method=TECHNIQUE)$coverage
    """.replace('TECHNIQUE',method)
    robjects.r(r_string)
© www.soinside.com 2019 - 2024. All rights reserved.