2016-06-07 2 views
1

Avec rpy2, en python 3.5, je peux définir une matrice R:affectation de Matrix à rpy2

import rpy2.robjects as robjects 
m = robjects.r.matrix(robjects.IntVector(range(10)), nrow=2, ncol = 5) 
print(m) 

    [,1] [,2] [,3] [,4] [,5] 
[1,] 0 2 4 6 8 
[2,] 1 3 5 7 9 

je peux alors extract an element by row, column, R-style:

print(m.rx(1, 2)) 

[1] 2 

Et je peux attribuer une valeur à un élément arbitraire , Python-style:

m[4] = 100 
print(m.rx(1, 3)) 

[1] 100 

Cependant, je ne peux pas comprendre comment affecter un élément par ligne, colonne. J'ai essayé les éléments suivants:

m.rx(1, 3) = 200 
    m.rx(1, 3) = 200 
    ^
SyntaxError: can't assign to function call 

et

m[0, 2] = 200 
    m[0, 2] = 200 
    File "/Users/xavier/python/3.5/lib/python3.5/site-packages/rpy2/robjects/vectors.py", line 261, in __setitem__ 
    res = super(Vector, self).__setitem__(i, value) 
TypeError: VectorSexp indices must be integers, not tuple 

Comment puis-je attribuer une valeur à une ligne, une colonne de cette matrice?

+1

googler '' rpy2 rx' suggère m.rx [1, 3] = 200' pourrait fonctionner. – user2357112

Répondre

1

Cela devrait normalement être décrit dans la documentation.

Faites nous savoir si ce qui suit est de ne pas répondre à la question: http://rpy2.readthedocs.io/en/version_2.8.x/vector.html#assigning-r-style

+0

La documentation est pour le vecteur et ne mentionne pas que vous pouvez faire m.rx [i, j], l'indexation R-style. Cependant, cela fonctionne, comme l'a mentionné user2357112. – Calimo

+0

En fait, j'aimerais ajouter, le doc ne suggère jamais qu'on peut utiliser deux index avec un crochet. La seule fois où je vois deux index c'est avec un crochet rond après '.rx', et ça ne marche pas pour l'assignation. Je suggère d'ajouter simplement une sous-section Assignment pour les matrices juste après l'extraction http://rpy2.readthedocs.io/en/version_2.8.x/vector.html#extracting qui peut présenter la syntaxe '.rx [i, j]' . – Calimo

+0

@Calimo Merci. Je vais regarder dans l'ajout d'un exemple à la doc. Les vecteurs, les matrices et les tableaux sont à peu près la même chose (dans R): une région de mémoire contiguë avec des dimensions. Vous pouvez également me battre et soumettre une demande d'extraction. – lgautier