2010-11-15 43 views
2

我可以在rec2csv numpy的ndarrays,從CSV到ndarray,並rpy2,

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. 

回答

1

我不是100%肯定,我理解你的問題,但有兩件事情:

1)如果是OK,你可以讀一個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)。

這兩種方法中的哪一種都能讓你到達需要的地方?

3

只是爲了得到從CSV文件的RPY2數據幀,在RPY2.3,你可以做:

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

文檔here