2010-11-15 25 views
2

je peux faire ndarrays numpy avec rec2csv,de CSV à ndarray et 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) 

Mais, je ne sais pas comment tenir un cadre de données R utilisable par Rpy2,

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. 

Répondre

1

Je ne suis pas 100% sûr que je comprends votre question, mais une ou deux choses:

1) si elle est ok, vous pouvez lire un fichier CSV en R directement, soit:

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

Après cela, vous pouvez vous référer à la trame de données résultante dans les fonctions ultérieures.

ou 2), vous pouvez convertir un tableau numpy dans une trame de données - pour ce faire, vous devez importer le package « rpy2.robjects.numpy2ri »

Ensuite, vous pouvez faire quelque chose comme:

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) 

Ou tout autres fonctions que vous vouliez. Il peut y avoir un moyen plus direct - je suis frustré d'aller entre les deux types de données et donc je suis beaucoup plus susceptible d'utiliser l'option 1) si possible.

Est-ce que l'une ou l'autre de ces méthodes vous mènerait où vous devez être?

3

juste pour obtenir une trame de données de RPY2 à partir d'un fichier csv, dans RPY2.3, vous pouvez simplement faire:

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

Documentation here.