Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将包中的R符号转换为Python符号时,rpy2发生冲突_Python_R_Rpy2 - Fatal编程技术网

将包中的R符号转换为Python符号时,rpy2发生冲突

将包中的R符号转换为Python符号时,rpy2发生冲突,python,r,rpy2,Python,R,Rpy2,我只是尝试了以下方法: 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('pr

我只是尝试了以下方法:

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"`
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
文件“C:\Users\me\AppData\Local\Continuum\anaconda3\lib\site packages\rpy2\robjects\packages.py”,第498行,在importr中
symbol_resolve=symbol_resolve)
文件“C:\Users\me\AppData\Local\Continuum\anaconda3\lib\site packages\rpy2\robjects\packages.py”,第202行,在u init中__
自我。自我填充(冲突中=冲突中)
文件“C:\Users\me\AppData\Local\Continuum\anaconda3\lib\site packages\rpy2\robjects\packages.py”,第328行,在uuu fill\urpy2r中__
.\uuuuu填充\urPy2r\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
文件“C:\Users\me\AppData\Local\Continuum\anaconda3\lib\site packages\rpy2\robjects\packages.py”,第238行,在uuu fill\urpy2r中__
例外情况)
文件“C:\Users\me\AppData\Local\Continuum\anaconda3\lib\site packages\rpy2\robjects\packages\u utils.py”,第120行,在_fix\u map\u符号中
引发异常(msg)
rpy2.robjects.packages.LibraryError:将包“princurve”中的R符号转换为Python符号时发生冲突:
-lines\u principal\u curve->lines.principal.curve,lines.principal\u curve
-plot\u principal\u curve->plot.principal.curve,plot.principal\u curve
-points\u principal\u curve->points.principal.curve,points.principal\u curve
要将此异常转换为简单警告,请使用参数`on\u conflict=“warn”`

有人能帮忙吗?

你就快到了!在
robject\u translations
中,您需要提供R name->Python名称映射,但您的字典似乎正好相反。您还需要将所有映射放在一个字典中。要想说得非常清楚,您可以这样解决冲突:

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)
但是,在咨询了之后,我发现
principal.curve
已被弃用,您应该改用
principal\u 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)

尝试忽略
robject\u translations
arg,因为
importr
会将句点转换为名称中的下划线,可能与您的尝试有名称冲突。如果忽略robject\u translations arh,我会收到相同的错误消息