2

Rmagics 和 Rpy2 在 Windows 10 上损坏。所有计算结果都输出到 Windows 控制台而不是 Jupyter 输出单元。RWinOut hack 不再有效。

一旦我使用 RWinout,我就会收到一个致命错误,需要我重新启动 Jupyter NB 服务器,它会杀死 Jupyter Notebook Python 内核。

我尝试在 3 种不同的 conda 环境中安装,单独使用 conda、Anaconda Navigator 或 pip。安装所有软件包后,它总是返回相同的代码错误。有一些人提供了安装 R 的逐步手动程序,然后是 rpy2,然后是特殊的支持包,然后是 Jupyter 等。这对于普通的数据科学家和分析师来说太乏味了。

Rpy2 需要重写以支持 Windows 10。

我希望它能够工作,因为带有 Plotly-Dash 的 Python-R NB、Qgrid 等 Jupyter NB 扩展等为丰富的交互式数据科学应用程序提供了很好的组合,而无需运行像 RShiny 或其他这样的额外服务器。

我可以加载 rpy2 并使用它的函数和对象,但不能加载 R 单元魔法。

#

这是我的版本信息:

R版本:('3','6.0','',76424)Rpy2版本:2.9.4 Python版本3.7.4:jupyter核心:4.5.0 jupyter-notebook:6.0.1 qtconsole:4.5.5 ipython:7.8 .0 ipykernel:5.1.2 jupyter 客户端:5.3.3 jupyter lab:1.1.4 nbconvert:5.6.0 ipywidgets:7.5.1 nbformat:4.4.0 traitlets:4.3.3 7.8.0 一切都使用Anaconda安装在这个环境中导航器或命令控制台中的 conda,除非 pip install 需要没有 conda 包的东西。

对于与 Jupyter 生态系统有关的任何事情,Conda 都是首选的包管理器,因为它被设计为与语言无关。

#

R 内联魔法将输出输出到 Jupyter 输出单元,但 R 单元魔法将结果输出到我用来启动 Jupyter Notebook 的 Windows 控制台。

一旦我运行 RWinOut,就会出现下面的错误并且内核死掉了。

我还在 Windows 控制台中收到以下消息:

Loading required package: R.oo
Loading required package: R.methodsS3
R.methodsS3 v1.8.0 (2020-02-14 07:10:20 UTC) successfully loaded. See ?R.methodsS3 for help.
R.oo v1.23.0 successfully loaded. See ?R.oo for help.
Attaching package: 'R.oo'
The following object is masked from 'package:R.methodsS3':
    throw
The following objects are masked from 'package:methods':
    getClasses, getMethods
The following objects are masked from 'package:base':
    attach, detach, load, save
R.utils v2.9.2 successfully loaded. See ?R.utils for help.
Attaching package: 'R.utils'
The following object is masked from 'package:utils':
    timestamp
The following objects are masked from 'package:base':
    cat, commandArgs, getOption, inherits, isOpen, nullfile, parse,
    warnings

奇怪的是,内联 R 魔法可以正常工作,但不能使用 Cell 魔法。

当我按如下方式运行 RWinOut 时:

!curl -O "https://raw.githubusercontent.com/vitorcurtis/RWinOut/master/RWinOut.py"

%reload_ext RWinOut

我收到一长串错误(如下)。它还杀死了 Jupyter NB 的 Python 内核。

rpy2.ipython 扩展已经加载。要重新加载它,请使用:%reload_ext rpy2.ipython


ValueError                                Traceback (most recent call last)
<ipython-input-25-49c9701f263c> in <module>
----> 1 get_ipython().run_line_magic('reload_ext', 'RWinOut')

C:\ProgramData\Anaconda3\lib\site-packages\IPython\core\interactiveshell.py in run_line_magic(self, magic_name, line, _stack_depth)
   2312                 kwargs['local_ns'] = sys._getframe(stack_depth).f_locals
   2313             with self.builtin_trap:
-> 2314                 result = fn(*args, **kwargs)
   2315             return result
   2316 

<C:\ProgramData\Anaconda3\lib\site-packages\decorator.py:decorator-gen-67> in reload_ext(self, module_str)

C:\ProgramData\Anaconda3\lib\site-packages\IPython\core\magic.py in <lambda>(f, *a, **k)
    185     # but it's overkill for just that one bit of state.
    186     def magic_deco(arg):
--> 187         call = lambda f, *a, **k: f(*a, **k)
    188 
    189         if callable(arg):

C:\ProgramData\Anaconda3\lib\site-packages\IPython\core\magics\extension.py in reload_ext(self, module_str)
     61         if not module_str:
     62             raise UsageError('Missing module name.')
---> 63         self.shell.extension_manager.reload_extension(module_str)

C:\ProgramData\Anaconda3\lib\site-packages\IPython\core\extensions.py in reload_extension(self, module_str)
    128                 self.loaded.add(module_str)
    129         else:
--> 130             self.load_extension(module_str)
    131 
    132     def _call_load_ipython_extension(self, mod):

C:\ProgramData\Anaconda3\lib\site-packages\IPython\core\extensions.py in load_extension(self, module_str)
     85                               dir=compress_user(self.ipython_extension_dir)))
     86             mod = sys.modules[module_str]
---> 87             if self._call_load_ipython_extension(mod):
     88                 self.loaded.add(module_str)
     89             else:

C:\ProgramData\Anaconda3\lib\site-packages\IPython\core\extensions.py in _call_load_ipython_extension(self, mod)
    132     def _call_load_ipython_extension(self, mod):
    133         if hasattr(mod, 'load_ipython_extension'):
--> 134             mod.load_ipython_extension(self.shell)
    135             return True
    136 

c:\Users\rlysakow\Desktop\00-PayEquity-WIP\RWinOut.py in load_ipython_extension(ip)
     39         # loading magic and libraries
     40         ip.run_line_magic('load_ext', 'rpy2.ipython')
---> 41         ip.run_line_magic('R', 'library(R.utils)')
     42         ip.run_line_magic('config', 'Application.verbose_crash=True')
     43 

C:\ProgramData\Anaconda3\lib\site-packages\IPython\core\interactiveshell.py in run_line_magic(self, magic_name, line, _stack_depth)
   2312                 kwargs['local_ns'] = sys._getframe(stack_depth).f_locals
   2313             with self.builtin_trap:
-> 2314                 result = fn(*args, **kwargs)
   2315             return result
   2316 

<C:\ProgramData\Anaconda3\lib\site-packages\decorator.py:decorator-gen-133> in R(self, line, cell, local_ns)

C:\ProgramData\Anaconda3\lib\site-packages\IPython\core\magic.py in <lambda>(f, *a, **k)
    185     # but it's overkill for just that one bit of state.
    186     def magic_deco(arg):
--> 187         call = lambda f, *a, **k: f(*a, **k)
    188 
    189         if callable(arg):

C:\ProgramData\Anaconda3\lib\site-packages\rpy2\ipython\rmagic.py in R(self, line, cell, local_ns)
    755             if result is not ri.NULL:
    756                 with localconverter(converter) as cv:
--> 757                     res = cv.ri2py(result)
    758                 return res
    759 

C:\ProgramData\Anaconda3\lib\functools.py in wrapper(*args, **kw)
    838                             '1 positional argument')
    839 
--> 840         return dispatch(args[0].__class__)(*args, **kw)
    841 
    842     funcname = getattr(func, '__name__', 'singledispatch function')

C:\ProgramData\Anaconda3\lib\site-packages\rpy2\robjects\pandas2ri.py in ri2py_vector(obj)
    137 @ri2py.register(SexpVector)
    138 def ri2py_vector(obj):
--> 139     res = numpy2ri.ri2py(obj)
    140     return res
    141 

C:\ProgramData\Anaconda3\lib\functools.py in wrapper(*args, **kw)
    838                             '1 positional argument')
    839 
--> 840         return dispatch(args[0].__class__)(*args, **kw)
    841 
    842     funcname = getattr(func, '__name__', 'singledispatch function')

C:\ProgramData\Anaconda3\lib\site-packages\rpy2\robjects\numpy2ri.py in ri2py_sexp(obj)
    157 def ri2py_sexp(obj):
    158     if (obj.typeof in _vectortypes) and (obj.typeof != VECSXP):
--> 159         res = numpy.asarray(obj)
    160     else:
    161         res = ro.default_converter.ri2py(obj)

C:\ProgramData\Anaconda3\lib\site-packages\numpy\core\numeric.py in asarray(a, dtype, order)
    536 
    537     """
--> 538     return array(a, dtype, copy=False, order=order)
    539 
    540 

ValueError: Buffer for this type not yet supported.

我找不到任何技巧或程序来消除最后一个错误。

我现在没有时间或技能来破解 ipython 扩展以使 rpy2 工作。

有人对 rpy2 有类似的经历吗?你是如何解决问题的?

4

0 回答 0