Python:如何使用 numpy2ri 只将一个变量 (numeral/integer) 传递给 R?
Python: How to take only one variable (numeral/integer) to R using numpy2ri?
我的问题很简单,我正在尝试将一个数据点的一个整数从 python 传输到 R。这样做的原因是因为我想在 R 中使用 R 函数,创建输出然后返回 -将它们转换为 python 进行绘图。
我已经用数组完成了它工作正常但不是单点数组。考虑这个简单的例子。
下面这个例子工作正常
import rpy2.robjects as robjects, pandas as pd, numpy as np
from rpy2.robjects import r
from rpy2.robjects.numpy2ri import numpy2ri
from rpy2.robjects.packages import importr
r_p1= numpy2ri(np.array((1,1)))
没问题!但是,如果 r_p1= numpy2ri(np.array((1)))
而不是 r_p1= numpy2ri(np.array((1,1)))
我收到以下错误
---------------------------------------------------------------------------
RRuntimeError Traceback (most recent call last)
<ipython-input-5-d404ef525bdb> in <module>()
4 from rpy2.robjects.packages import importr
5
----> 6 r_p1= numpy2ri(np.array((1)))
7
8 # df= pd.DataFrame(np.random.random((108, 2)), columns=['Number1','Number2'])
D:\Anaconda3\lib\site-packages\rpy2\robjects\numpy2ri.py in numpy2ri(o)
80 #FIXME: no dimnames ?
81 #FIXME: optimize what is below needed/possible ? (other ways to create R arrays ?)
---> 82 res = rinterface.baseenv['array'](vec, dim=dim)
83 # R does not support unsigned types:
84 elif o.dtype.kind == "u":
RRuntimeError: Error in (function (data = NA, dim = length(data), dimnames = NULL) :
'dims' cannot be of length 0
编辑
只是为了更好地问我的问题,据我所知,在 R 中不可能使用一个整数而不是数组。
但我真正需要的是在 R 中调用一个接受输入的函数,其中一个是单个数字,例如 3,或者可能是 21,在 python 中确定的元素。
特别是,我在R中调用了这样一个库r('library("vars")')
因此我想使用一些矩阵,将其称为 y 2 x 100
# Run a normal VAR model
r("t=VAR(y, p=p1, type='const')")
如您所见,p1 是一个数字,例如 3(在 python 中选择)
作为r.assign("p1", r_p1)
d
# Then find the summary statistics
r('s=summary(t)')
这给了我这个错误
RRuntimeError: Error in crossprod(resids)/obs : non-conformable arrays
np.array((1, 1)) # tuple of length 2
np.array((1)) # literally the integer 1
np.array((1,)) # tuple with a single element
在第三个示例中调用它 np.array((1,))
对我有用
这有点奇怪,因为在 R 中没有纯数字这样的东西;一切都是向量(有时长度为 1)。据我从文档中可以看出,这是发送整数的最佳方式。
我真正想做的是将一个数值(矩阵中的一项)传输到 R。这样做的原因是将 python 中的任何整数用于 R 中的函数需要具有整数的输入。不幸的是,这会导致许多错误。要克服它,需要将输入作为字符串变量。已经这样做了
定义一个字符串变量,可以在python如
中有变量单个整数
p1= int(5) # variable integer in python
A='t=VAR(y, p='+str(p1)+', type=\'const\')'
那么可以简单地将R中的函数VAR称为
r(A)
这将解开谜团
我的问题很简单,我正在尝试将一个数据点的一个整数从 python 传输到 R。这样做的原因是因为我想在 R 中使用 R 函数,创建输出然后返回 -将它们转换为 python 进行绘图。
我已经用数组完成了它工作正常但不是单点数组。考虑这个简单的例子。
下面这个例子工作正常
import rpy2.robjects as robjects, pandas as pd, numpy as np
from rpy2.robjects import r
from rpy2.robjects.numpy2ri import numpy2ri
from rpy2.robjects.packages import importr
r_p1= numpy2ri(np.array((1,1)))
没问题!但是,如果 r_p1= numpy2ri(np.array((1)))
而不是 r_p1= numpy2ri(np.array((1,1)))
我收到以下错误
---------------------------------------------------------------------------
RRuntimeError Traceback (most recent call last)
<ipython-input-5-d404ef525bdb> in <module>()
4 from rpy2.robjects.packages import importr
5
----> 6 r_p1= numpy2ri(np.array((1)))
7
8 # df= pd.DataFrame(np.random.random((108, 2)), columns=['Number1','Number2'])
D:\Anaconda3\lib\site-packages\rpy2\robjects\numpy2ri.py in numpy2ri(o)
80 #FIXME: no dimnames ?
81 #FIXME: optimize what is below needed/possible ? (other ways to create R arrays ?)
---> 82 res = rinterface.baseenv['array'](vec, dim=dim)
83 # R does not support unsigned types:
84 elif o.dtype.kind == "u":
RRuntimeError: Error in (function (data = NA, dim = length(data), dimnames = NULL) :
'dims' cannot be of length 0
编辑
只是为了更好地问我的问题,据我所知,在 R 中不可能使用一个整数而不是数组。
但我真正需要的是在 R 中调用一个接受输入的函数,其中一个是单个数字,例如 3,或者可能是 21,在 python 中确定的元素。
特别是,我在R中调用了这样一个库r('library("vars")')
因此我想使用一些矩阵,将其称为 y 2 x 100
# Run a normal VAR model
r("t=VAR(y, p=p1, type='const')")
如您所见,p1 是一个数字,例如 3(在 python 中选择)
作为r.assign("p1", r_p1)
d
# Then find the summary statistics
r('s=summary(t)')
这给了我这个错误
RRuntimeError: Error in crossprod(resids)/obs : non-conformable arrays
np.array((1, 1)) # tuple of length 2
np.array((1)) # literally the integer 1
np.array((1,)) # tuple with a single element
在第三个示例中调用它 np.array((1,))
对我有用
这有点奇怪,因为在 R 中没有纯数字这样的东西;一切都是向量(有时长度为 1)。据我从文档中可以看出,这是发送整数的最佳方式。
我真正想做的是将一个数值(矩阵中的一项)传输到 R。这样做的原因是将 python 中的任何整数用于 R 中的函数需要具有整数的输入。不幸的是,这会导致许多错误。要克服它,需要将输入作为字符串变量。已经这样做了
定义一个字符串变量,可以在python如
中有变量单个整数p1= int(5) # variable integer in python
A='t=VAR(y, p='+str(p1)+', type=\'const\')'
那么可以简单地将R中的函数VAR称为
r(A)
这将解开谜团