当我将 pandas DataFrame 作为输入参数传递给 magic line 时,出现错误。
%R -i df
ValueError: Buffer for this type not yet supported.
下面粘贴的是我将 pandas df 作为输入传递给魔法单元的完整代码。
我在 Windows 10 上运行我的代码。我有 2019.10 Windows 64 位版本的 Anaconda。这些软件包具有以下版本 - rpy2 - 2.9.4、python - 3.6.9、jupyter - 1.0.0、pandas - 0.25.2。
我最近在我的电脑上重新安装了 anaconda。我安装了相同的软件包,但与过去的版本不同。我没有什么我以前版本的包在哪里。我的代码在重新安装之前可以正常工作。下面的代码是一个示例,但是
在我运行 magic cell 之后,我得到了错误。
%%R -i df
df$index <- as.numeric(row.names(df))
library(ggplot2)
ggplot(data = df, aes(x = index)) +
geom_line(aes(y = col1, color = 'col1'), size = 0.5) +
geom_line(aes(y = col2, color = 'col2'), size = 0.5)
ValueError: Buffer for this type not yet supported.
现在我回到同一个单元格并删除输入参数并再次重新运行它,我得到了所需的输出,没有任何错误。
%%R
df$index <- as.numeric(row.names(df))
library(ggplot2)
ggplot(data = df, aes(x = index)) +
geom_line(aes(y = col1, color = 'col1'), size = 0.5) +
geom_line(aes(y = col2, color = 'col2'), size = 0.5)
完整代码如下。
--> import pandas as pd
df = pd.DataFrame({'col1': [1, 2, 3, 4], 'col2': [5, 6, 7, 8], 'col3': ['a','b','a','b']})
df
-- >%load_ext rpy2.ipython
--> %%R -i df
df$index <- as.numeric(row.names(df))
library(ggplot2)
ggplot(data = df, aes(x = index)) +
geom_line(aes(y = col1, color = 'col1'), size = 0.5) +
geom_line(aes(y = col2, color = 'col2'), size = 0.5)
我希望 R magic 能够正常工作,以便我使用 ggplot2 绘制我的数据,就像在我重新安装 anaconda 之前一样。
错误如下。
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-57-4a5dfe23f86a> in <module>
----> 1 get_ipython().run_cell_magic('R', '-i df', "df$index <- as.numeric(row.names(df))\nlibrary(ggplot2)\nggplot(data = df, aes(x = index)) + \n geom_line(aes(y = col1, color = 'col1'), size = 0.5) + \n geom_line(aes(y = col2, color = 'col2'), size = 0.5)\n")
C:\Anaconda3\envs\keras\lib\site-packages\IPython\core\interactiveshell.py in run_cell_magic(self, magic_name, line, cell)
2357 with self.builtin_trap:
2358 args = (magic_arg_s, cell)
-> 2359 result = fn(*args, **kwargs)
2360 return result
2361
<C:\Anaconda3\envs\keras\lib\site-packages\decorator.py:decorator-gen-131> in R(self, line, cell, local_ns)
C:\Anaconda3\envs\keras\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:\Anaconda3\envs\keras\lib\site-packages\rpy2\ipython\rmagic.py in R(self, line, cell, local_ns)
688 raise NameError("name '%s' is not defined" % input)
689 with localconverter(converter) as cv:
--> 690 ro.r.assign(input, val)
691
692 tmpd = self.setup_graphics(args)
C:\Anaconda3\envs\keras\lib\site-packages\rpy2\robjects\functions.py in __call__(self, *args, **kwargs)
176 v = kwargs.pop(k)
177 kwargs[r_k] = v
--> 178 return super(SignatureTranslatedFunction, self).__call__(*args, **kwargs)
179
180 pattern_link = re.compile(r'\\link\{(.+?)\}')
C:\Anaconda3\envs\keras\lib\site-packages\rpy2\robjects\functions.py in __call__(self, *args, **kwargs)
105 new_kwargs[k] = conversion.py2ri(v)
106 res = super(Function, self).__call__(*new_args, **new_kwargs)
--> 107 res = conversion.ri2ro(res)
108 return res
109
C:\Anaconda3\envs\keras\lib\functools.py in wrapper(*args, **kw)
805 '1 positional argument')
806
--> 807 return dispatch(args[0].__class__)(*args, **kw)
808
809 funcname = getattr(func, '__name__', 'singledispatch function')
C:\Anaconda3\envs\keras\lib\site-packages\rpy2\ipython\rmagic.py in _(obj)
147 if 'data.frame' in obj.rclass:
148 # request to turn it to a pandas DataFrame
--> 149 res = converter.ri2py(obj)
150 else:
151 res = ro.sexpvector_to_ro(obj)
C:\Anaconda3\envs\keras\lib\functools.py in wrapper(*args, **kw)
805 '1 positional argument')
806
--> 807 return dispatch(args[0].__class__)(*args, **kw)
808
809 funcname = getattr(func, '__name__', 'singledispatch function')
C:\Anaconda3\envs\keras\lib\site-packages\rpy2\robjects\pandas2ri.py in ri2py_listvector(obj)
181 def ri2py_listvector(obj):
182 if 'data.frame' in obj.rclass:
--> 183 res = ri2py(DataFrame(obj))
184 else:
185 res = numpy2ri.ri2py(obj)
C:\Anaconda3\envs\keras\lib\functools.py in wrapper(*args, **kw)
805 '1 positional argument')
806
--> 807 return dispatch(args[0].__class__)(*args, **kw)
808
809 funcname = getattr(func, '__name__', 'singledispatch function')
C:\Anaconda3\envs\keras\lib\site-packages\rpy2\robjects\pandas2ri.py in ri2py_dataframe(obj)
188 @ri2py.register(DataFrame)
189 def ri2py_dataframe(obj):
--> 190 items = tuple((k, ri2py(v)) for k, v in obj.items())
191 res = PandasDataFrame.from_items(items)
192 return res
C:\Anaconda3\envs\keras\lib\site-packages\rpy2\robjects\pandas2ri.py in <genexpr>(.0)
188 @ri2py.register(DataFrame)
189 def ri2py_dataframe(obj):
--> 190 items = tuple((k, ri2py(v)) for k, v in obj.items())
191 res = PandasDataFrame.from_items(items)
192 return res
C:\Anaconda3\envs\keras\lib\functools.py in wrapper(*args, **kw)
805 '1 positional argument')
806
--> 807 return dispatch(args[0].__class__)(*args, **kw)
808
809 funcname = getattr(func, '__name__', 'singledispatch function')
C:\Anaconda3\envs\keras\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:\Anaconda3\envs\keras\lib\functools.py in wrapper(*args, **kw)
805 '1 positional argument')
806
--> 807 return dispatch(args[0].__class__)(*args, **kw)
808
809 funcname = getattr(func, '__name__', 'singledispatch function')
C:\Anaconda3\envs\keras\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:\Anaconda3\envs\keras\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.
最佳答案
我刚遇到这个问题。由于 numpy update,这似乎是一个错误.经过调查,错误来自将数据帧中的字符串传递给 R。解决此问题的最简单方法是简单地 update rpy2 to version 3.1 .
从你的系统中删除 rpy2
conda remove rpy2
现在重新安装
conda install -c conda-forge rpy2
关于python-3.x - %R 魔法输入参数在 Jupyter Notebook 中无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58561333/