Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/gwt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 通过rpy2将numpy阵列传递给R时的非一致性阵列_Python_R_Rpy2 - Fatal编程技术网

Python 通过rpy2将numpy阵列传递给R时的非一致性阵列

Python 通过rpy2将numpy阵列传递给R时的非一致性阵列,python,r,rpy2,Python,R,Rpy2,我试图将一个numpy数组传递给R中的GAMLSS包 import numpy as np import rpy2.robjects as robjects from rpy2.robjects import numpy2ri numpy2ri.activate() r = robjects.r r.library("gamlss") r.library("gamlss.mx") L = r['data.frame'](np.array(np.random.normal(size=1000),

我试图将一个numpy数组传递给R中的GAMLSS包

import numpy as np
import rpy2.robjects as robjects
from rpy2.robjects import numpy2ri
numpy2ri.activate()
r = robjects.r
r.library("gamlss")
r.library("gamlss.mx")

L = r['data.frame'](np.array(np.random.normal(size=1000), 
                             dtype=([('x', np.float), ('y', np.float), ('z', np.float)])))
r.gamlssMX(robjects.Formula('z~1'), data=L)
运行此命令将返回

Error in y0 - f0 : non-conformable arrays
但我可以将数据帧传递给线性模型R函数

lm = r.lm(robjects.Formula('x~y'), data=L)
print r.summary(lm.rx())
我有一堆用Python读取二进制文件的代码,但我想使用R包,因此需要rpy2

--编辑--

以R为例:

x <- data.frame(z=c(rnorm(1000), rnorm(1000, mean=4)))
gamlssMX(z~1, K=1, data=x)

x看起来像是一个bug,如果我使用现在贬值的
pandas.rpy.common.convert_to_r_dataframe
,它可以正常工作:

但目前首选的方法会产生错误:

import numpy as np
import rpy2.robjects as robjects
from rpy2.robjects import pandas2ri
import pandas.rpy.common as com

robjects.reval("library('gamlss')")
robjects.reval("library('gamlss.mx')")

R =pd.DataFrame({'x': np.random.random(2000)})
A1 = pandas2ri.pandas2ri(R)
A2 = com.convert_to_r_dataframe(R)
robjects.r.assign('B1', A1)
robjects.r.assign('B2', A2)
robjects.reval("m <- gamlssMX(x~1, K=1, data=B1)") #won't work
robjects.reval("m <- gamlssMX(x~1, K=1, data=B2)") #works fine
当数据向量是
Array
而不是
FloatVector
时,看起来像是
gamlss
引发异常

In [3]:

robjects.r.B1
Out[3]:
<DataFrame - Python:0x10e868a28 / R:0x10f425238>
[Array]
  x: <class 'rpy2.robjects.vectors.Array'>
  <Array - Python:0x10e868b48 / R:0x10f425400>
[0.051728, 0.149642, 0.884797, ..., 0.485063, 0.733193, 0.134963]
In [4]:

robjects.r.B2
Out[4]:
<DataFrame - Python:0x10e868cf8 / R:0x110e1b918>
[FloatVector]
  x: <class 'rpy2.robjects.vectors.FloatVector'>
  <FloatVector - Python:0x10e868e18 / R:0x10f442400>
[0.051728, 0.149642, 0.884797, ..., 0.485063, 0.733193, 0.134963]