2

我可以用 rec2csv 制作 numpy ndarrays,

data = recfromcsv(dataset1, names=True)
xvars = ['exp','exp_sqr','wks','occ','ind','south','smsa','ms','union','ed','fem','blk']
y = data['lwage']
X = data[xvars]
c = ones_like(data['lwage'])
X = add_field(X, 'constant', c)

但是,我不知道如何将其放入 Rpy2 可用的 R 数据框中,

p = roptim(theta,robjects.r['ols'],method="BFGS",hessian=True ,y= robjects.FloatVector(y),X = base.matrix(X))

ValueError: Nothing can be done for the type <class 'numpy.core.records.recarray'> at the moment.

p = roptim(theta,robjects.r['ols'],method="BFGS",hessian=True ,y= robjects.FloatVector(y),X = base.matrix(array(X)))

ValueError: Nothing can be done for the type <type 'numpy.ndarray'> at the moment.
4

2 回答 2

3

只是为了从 csv 文件中获取 RPY2 DataFrame,在 RPY2.3 中,您可以这样做:

df = robjects.DataFrame.from_csvfile('filename.csv')

文档在这里

于 2012-01-16T16:05:12.870 回答
1

我不是 100% 确定我理解你的问题,但有几件事:

1)如果可以的话,可以直接将一个csv读入R,即:

robjects.r('name <- read.csv(filename.csv)')

之后,您可以在以后的函数中引用生成的数据框。

或者 2)您可以将 numpy 数组转换为数据框 - 为此,您需要导入包 'rpy2.robjects.numpy2ri'

然后你可以做类似的事情:

array_ex = np.array([[4,3],[3,2], [1,5]])
rmatrix = robjects.r('matrix')
rdf = robjects.r('data.frame')
rlm = robjects.r('lm')

mat_ex = rmatrix(array_ex, ncol = 2)
df_ex = rdf(mat_ex) 
fit_ex = rlm('X1 ~ X2', data = df_ex)

或者你想要的任何其他功能。可能有更直接的方法 - 我在两种数据类型之间感到沮丧,所以如果可能的话,我更有可能使用选项 1)。

这些方法中的任何一种都能让你到达你需要的地方吗?

于 2010-11-16T19:36:11.893 回答