我有一個 rpy2 腳本:from rpy2.robjects.packages import importrbinom = importr('binom')from rpy2 import robjectsrobjects.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
1 回答

楊__羊羊
TA貢獻1943條經驗 獲得超7個贊
robjects.r()收到一個字符串,因此對于此特定任務,您只需將單詞 method 替換為正確的字符串即可。使用兩個引號(單引號和雙引號)就可以解決問題,因為.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)
添加回答
舉報
0/150
提交
取消