【发布时间】:2011-03-25 17:46:31
【问题描述】:
我想在 Python 中使用 Rpy2 模块提供的 R。我注意到 R 有非常方便的 [] 操作,您可以通过它提取特定的列或行。 Python脚本如何实现这样的功能?
我的想法是创建一个R向量并将那些想要的元素添加到这个向量中,以便最终的向量与R中的相同。我创建了一个seq(),但它似乎有一个初始数字1,所以最终结果总是以数字 1 开头,这不是我想要的。那么,有没有更好的方法来做到这一点?
【问题讨论】:
我想在 Python 中使用 Rpy2 模块提供的 R。我注意到 R 有非常方便的 [] 操作,您可以通过它提取特定的列或行。 Python脚本如何实现这样的功能?
我的想法是创建一个R向量并将那些想要的元素添加到这个向量中,以便最终的向量与R中的相同。我创建了一个seq(),但它似乎有一个初始数字1,所以最终结果总是以数字 1 开头,这不是我想要的。那么,有没有更好的方法来做到这一点?
【问题讨论】:
vec <- vector()
另见矢量帮助
?vector
【讨论】:
我预先分配了一个向量
> (a <- rep(NA, 10))
[1] NA NA NA NA NA NA NA NA NA NA
然后您可以使用 [] 向其中插入值。
【讨论】:
你可以像这样创建一个空向量
vec <- numeric(0)
然后使用 c() 添加元素
vec <- c(vec, 1:5)
但是正如 romunov 所说,最好预先分配一个向量然后填充它(因为这样可以避免在每次添加元素时重新分配一个新的向量副本)
【讨论】:
要创建一个空向量,请使用:
vec <- c();
请注意,我不会对您需要的向量类型做出任何假设,例如数字。
创建矢量后,您可以向其中添加元素,如下所示:
例如,添加数值 1:
vec <- c(vec, 1);
或者,添加一个字符串值“a”
vec <- c(vec, "a");
【讨论】:
vec <- c() 将 vec 设置为 NULL。如果你想要一个空向量,你可以使用vec <- character()、vec <- numeric() 等。
我也见过
x <- {}
现在您可以将任意维度的向量连接或绑定到x
rbind(x, 1:10)
cbind(x, 1:10)
c(x, 10)
【讨论】:
x <- NULL 完全相同,除了对nowhere 的引用之外不会创建任何其他内容。
正如 Brani 所指出的,vector() 是一种解决方案,例如
newVector <- vector(mode = "numeric", length = 50)
将返回一个名为“newVector”的向量,其中包含 50 个“0”作为初始值。将新标量添加到现有向量以得到扩展向量也很常见,例如
aVector <- c(aVector, newScalar)
【讨论】:
在 rpy2 中,使用 R 获得与“[”相同的运算符的方法是使用“.rx”。 请参阅有关extracting with rpy2 的文档
对于创建向量,如果您熟悉 Python,应该不会有任何问题。 请参阅有关creating vectors的文档
【讨论】: