如何创建一个空的R向量以添加新项目


92

我想在Rpy2模块提供的Python中使用R。我注意到R具有非常方便的[]操作,您可以通过该操作提取特定的列或行。如何通过Python脚本实现这样的功能?

我的想法是创建一个R向量并将这些需要的元素添加到该向量中,以便最终向量与R中的向量相同。我创建了一个seq(),但似乎它的起始数字为1,因此最终结果将始终为从数字1开始,这不是我想要的。那么,有没有更好的方法可以做到这一点?

Answers:



56

我预先分配了一个向量

> (a <- rep(NA, 10))
 [1] NA NA NA NA NA NA NA NA NA NA

然后,您可以使用[]将值插入其中。


如果从一开始就知道向量的长度,这将是最好的答案,因为它将最有效地利用内存
Stevec

25

您可以像这样创建一个空向量

vec <- numeric(0)

然后使用c()添加元素

vec <- c(vec, 1:5)

但是,正如romunov所说,最好预先分配一个向量然后填充它(因为这样可以避免在每次添加元素时重新分配向量的新副本)


我喜欢您使用numeric()的解决方案,但是我的经验使我使用NA而不是0(如果您使用numeric(2),您将得到0 0)。但这是我的个人喜好。
罗曼·卢斯特里克(RomanLuštrik),2010年

非常感谢!!但是是否可以在添加一个新元素之后释放上一个元素?我应该简单地使用rm()吗?
ligwin 2010年

还有一个问题,typeof(numeric(0))给出“ double”,而想要的元素给出“ integer”,添加时出现一个错误,说“新值的类型不能不同”,如何转换?
ligwin 2010年

在python中工作时,“ as”是关键字,此外,python没有这种数据类型,所以我认为“ as.integer”将不起作用?
ligwin 2010年

romunov-numeric(0)表示创建长度为0(即没有元素)的数字矢量,而不是长度为1且元素为0的矢量
Aaron Statham 2010年

6

要创建一个空向量,请使用:

vec <- c();

请注意,我对您需要的向量类型(例如数字)不做任何假设。

创建矢量后,可以按如下所示向其中添加元素:

例如,要添加数值1:

vec <- c(vec, 1);

或者,添加字符串值“ a”

vec <- c(vec, "a");

4
您实际尝试过吗?vec <- c()将vec设置为NULL。如果你想要一个空的载体,你会使用vec <- character()vec <- numeric()等等
马修·怀斯

5

我也看过

x <- {}

现在,您可以将任何维度的向量连接或绑定到 x

rbind(x, 1:10)
cbind(x, 1:10)
c(x, 10)

2
这与完全相同x <- NULL,除了对nowhere的引用以外,不会创建任何其他内容。
Joris Meys 2013年

3

正如Brani所指出的,vector()是一个解决方案,例如

newVector <- vector(mode = "numeric", length = 50)

将返回一个名为“ newVector”的向量,其初始值为50“ 0”。将新标量添加到现有矢量上以得到扩展矢量也很普遍,例如

aVector <- c(aVector, newScalar)


2

在rpy2中,使用R获得与“ [”完全相同的运算符的方法是使用“ .rx”。请参阅有关使用rpy2提取的文档

对于创建矢量,如果您了解使用Python的方式,应该不会有任何问题。请参阅有关创建向量的文档


我曾经为此目的在python中创建一个函数,该函数非常复杂,我不确定它的适用范围。现在,我认为有了这些操作员,生活会容易得多:)
ligwin 2010年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.