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)

这将解开谜团