簡體   English   中英

rpy2 將包中的 R 符號轉換為 Python 符號時發生沖突

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM