[英]rpy2 Conflict when converting R symbols in the package to Python symbols
我只是嘗試了以下方法:
import rpy2
import rpy2.robjects as RObjects
from rpy2.robjects.packages import importr
princurve = importr('princurve', robject_translations = {"plot_principal_curve": "plot.principal.curve"})
princurve = importr('princurve', robject_translations = {"points_principal_curve": "points.principal.curve"})
並得到這個錯誤
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "C:\Users\me\AppData\Local\Continuum\anaconda3\lib\site-packages\rpy2\robjects\packages.py", line 498, in importr
symbol_resolve=symbol_resolve)
File "C:\Users\me\AppData\Local\Continuum\anaconda3\lib\site-packages\rpy2\robjects\packages.py", line 202, in __init__
self.__fill_rpy2r__(on_conflict=on_conflict)
File "C:\Users\me\AppData\Local\Continuum\anaconda3\lib\site-packages\rpy2\robjects\packages.py", line 328, in __fill_rpy2r__
.__fill_rpy2r__(on_conflict=on_conflict))
File "C:\Users\me\AppData\Local\Continuum\anaconda3\lib\site-packages\rpy2\robjects\packages.py", line 238, in __fill_rpy2r__
exception)
File "C:\Users\me\AppData\Local\Continuum\anaconda3\lib\site-packages\rpy2\robjects\packages_utils.py", line 120, in _fix_map_symbols
raise exception(msg)
rpy2.robjects.packages.LibraryError: Conflict when converting R symbols in the package "princurve" to Python symbols:
-lines_principal_curve -> lines.principal.curve, lines.principal_curve
- plot_principal_curve -> plot.principal.curve, plot.principal_curve
- points_principal_curve -> points.principal.curve, points.principal_curve
To turn this exception into a simple warning use the parameter `on_conflict="warn"`
有人可以幫忙嗎?
你快到了! 在robject_translations
您需要提供 R 名稱 -> Python 名稱映射,但您的字典似乎robject_translations
相反。 您還需要在一個字典中包含所有映射。 為了使它非常清楚,您可以像這樣解決沖突:
princurve_example_1 = importr(
"princurve",
robject_translations={
"plot.principal.curve": "plot_dot_principal_dot_curve",
"lines.principal.curve": "lines_dot_principal_dot_curve",
"points.principal.curve": "points_dot_principal_dot_curve",
# optional (if omitted, you will get them under plot_principal_curve, etc.):
"plot.principal_curve": "plot_dot_principal_curve",
"lines.principal_curve": "lines_dot_principal_curve",
"points.principal_curve": "points_dot_principal_curve"
}
)
# then, after creating the curve and storing it in curve variable:
princurve_example_1.plot_dot_principal_dot_curve(curve)
# or
princurve_example_1.plot_dot_principal_curve(curve)
但是,在查閱pincurve 文檔后,我發現principal.curve
已被棄用,您應該改用principal_curve
(很高興看到更多 R 包最終轉向在可能的情況下在函數和變量名稱中使用下划線的約定!); 因此你可以這樣做:
princurve = importr(
"princurve",
robject_translations={
"plot.principal.curve": "plot_principal_curve_deprecated",
"lines.principal.curve": "lines_principal_curve_deprecated",
"points.principal.curve": "points_principal_curve_deprecated",
}
)
# auto-generated from "plot.principal_curve"
princurve.plot_principal_curve(curve)
# manually mapped from "plot.principal.curve"
princurve.plot_principal_curve_deprecated(curve)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.