【问题标题】:Matrix assignment in rpy2rpy2中的矩阵赋值
【发布时间】:2016-06-07 15:04:27
【问题描述】:

使用 rpy2,在 python 3.5 中,我可以定义一个 R 矩阵:

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

然后我可以extract an element by row, column, R-style:

print(m.rx(1, 2))

[1] 2

我可以为任意元素赋值,Python 风格:

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

[1] 100

但是,我不知道如何按行、列分配元素。我尝试了以下方法:

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

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

如何为该矩阵的行、列赋值?

【问题讨论】:

  • 谷歌搜索 rpy2 rx 建议 m.rx[1, 3] = 200 可能有用。

标签: python python-3.x rpy2


【解决方案1】:

这通常应该在文档中描述。

如果以下内容没有回答问题,请告诉我们:http://rpy2.readthedocs.io/en/version_2.8.x/vector.html#assigning-r-style

【讨论】:

  • 文档是针对向量的,没有提到你可以做 m.rx[i, j],R 风格的索引。但是,正如 user2357112 提到的那样,它可以工作。
  • 实际上我想补充一点,文档从不建议可以使用带方括号的两个索引。我唯一一次看到两个索引是在.rx 之后带有一个圆括号,这不适用于分配。我建议在 Extraction rpy2.readthedocs.io/en/version_2.8.x/vector.html#extracting 之后简单地为矩阵添加一个 Assignment 小节,可以展示 .rx[i, j] 语法。
  • @Calimo 谢谢。我会考虑在文档中添加一个示例。向量、矩阵和数组几乎是相同的东西(在 R 中):具有维度的连续内存区域。你也可以打败我并提交一个拉取请求。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-03-04
  • 1970-01-01
  • 2019-05-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-19
相关资源
最近更新 更多