【问题标题】:Line magic function `%%R` not found找不到行魔术函数`%%R`
【发布时间】:2019-12-05 15:04:11
【问题描述】:

我正在使用 Mac OS Catalina、PyCharm 和 Jupyter 笔记本。我正在尝试从 python 代码中传递一个带有 %%R 的变量

import rpy2.rinterface

%load_ext rpy2.ipython

print(rpy2.__version__)
v=2

%%R -i v
print(v)

我收到此错误:

UsageError: Line magic function `%%R` not found.

Python 3.7.5 rpy2 3.2.2 R 3.5.1 此错误的原因可能是什么,我该如何解决?

【问题讨论】:

  • 在 Linux 上测试了 PyCharm 2019.3(专业版)中的 sn-p(使用 %load_ext),它按预期工作。你的 PyCharm 版本是多少?我的版本是 rpy2:3.2.2 Python 3.7.5、R 3.6.1。
  • PyCharm 是 2019.3(专业版),唯一的区别是 R。我的是 3.5.1。我真的看不出有任何正当理由。我也尝试卸载和安装东西,但它并没有消失......
  • 你看到下面的this answer了吗?

标签: jupyter-notebook pycharm rpy2


【解决方案1】:

%%R 是细胞魔法,而不是线条魔法。你需要把它放在一个新的单元格中。在 PyCharm 中,单元格是使用 #%% 注释标记创建的。在 PyCharm 环境中正确使用是:

#%%

%load_ext rpy2.ipython
v = 2

#%%

%%R -i v
print(v)

单元格魔法以两个百分号 (%%cell_magic_name) 开头,线条魔法以一个百分号 (%line_magic_name) 开头。您的错误消息表明您尝试在与单元格开头不同的位置使用单元格魔法 - 并且您的 sn-p 没有(PyCharm 特定的)单元格分隔符来确认是这种情况。

rpy2 提供了(名称相同的)单元格和行 R 魔法(唯一的区别是 % 符号的数量),但是单元格魔法必须放在单元格的最开头 - 里面的代码此单元格将被解释​​为 R。

【讨论】:

  • 我更新了 R 并遵循了上面的建议。现在问题解决了。非常感谢!!
  • 很高兴它有帮助!您可以通过accepting this answer 帮助保持 SO 整洁。用 rpy2 玩得开心!。
  • "%%R 必须在单元格的开头"。即使是放在它上面的 cmets 也可能会破坏它。
【解决方案2】:

在尝试使用“R 魔法”之前,请考虑使用 %load_ext rpy2.ipython 加载相关的 Jupyter 扩展 (见https://rpy2.github.io/doc/v3.2.x/html/interactive.html#usage

【讨论】:

  • 是的。这很奇怪,对吧?当我使用 print(rpy2.__version__) 时,它可以工作并将版本写入 3.2.2。我只是不明白问题到底是什么:(有什么方法可以测试什么不起作用?
【解决方案3】:

如果只使用 Jupyter,请确保运行

%%R -i v
print(v)

在一个单独的单元格中,不要在%%R上方添加任何代码-甚至#cmets-。

所以正确的用法是:

单元格 1:

%load_ext rpy2.ipython

v = 2

单元格 2:

%%R -i v
print(v)

如果你把所有东西都放在同一个单元格中,它就行不通了。

这不起作用:

%load_ext rpy2.ipython

v = 2

%%R -i v
print(v)
UsageError: Line magic function `%%R` not found.

我觉得原因和here解释的一样。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-04-18
    • 2021-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-23
    • 2013-08-13
    • 1970-01-01
    相关资源
    最近更新 更多