2010-08-05 91 views
77

我想在模块Rpy2提供的Python中使用R。我注意到R有非常方便的操作,通过这些操作你可以提取特定的列或行。我怎样才能通过Python脚本实现这样的功能?如何创建一个空的R向量来添加新项目

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

回答

43

我预分配的载体与

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

然后可以使用[]将值插入它。

+7

你不需要'c()'。 'a <-rep(NA,10)'起作用。我们可以通过使用特定类型的NA,例如'rep(NA_integer_,10)'(见'help(“NA”)')来强制向量类。 – Marek 2010-08-05 11:52:39

+0

当然,你可以剔除c(),这是我的一个高级时刻。好的信息马雷克,谢谢。 – 2010-08-05 12:30:13

21

您可以创建一个像这样

vec <- numeric(0) 

空载体,然后添加使用C()元素

vec <- c(vec, 1:5) 

然而,随着romunov说,这是更好的预分配一个载体,然后填充它(因为这避免了每次添加元素时重新分配向量的新副本)

+0

我喜欢你的解决方案与数字(),但我的经验让我使用NA而不是0(如果你使用数字(2),你会得到0 0)。但这是我个人的偏好。 – 2010-08-05 12:19:56

+0

非常感谢!但是在添加一个新元素之后可以释放前一个元素吗?我应该简单地使用rm()吗? – ligwin 2010-08-05 12:41:35

+0

还有另一个问题,typeof(numeric(0))给出了“double”,而想要的元素给出了“integer”,当添加时,出现错误提示“新值的类型不能不同”,如何转换? – ligwin 2010-08-05 12:53:53

87
vec <- vector() 

请参阅也向量帮忙

?vector 
+3

这是使用的最佳策略。 – Kevin 2012-06-14 23:18:44

+3

完美的答案,甚至可以减少因剩余指数或NA漂浮而出现错误的风险!无论如何,这正是我所需要的。 – Mnescat 2012-09-19 09:05:52

+2

我刚刚注意到我前一段时间已经来过这里,并且已经投票了。那么再次感谢;-) – greg121 2013-03-11 23:19:01

4

我也看到

x <- {} 

现在,您可以连接或任何尺寸的载体结合x

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

这与'x < - NULL'完全相同,并且不会创建任何东西而不是引用无处。 – 2013-12-20 14:24:23

1

在rpy2的方式来获得与R的“[”非常相同的运算符是使用“.rx”。 请参阅有关文档extracting with rpy2

要创建向量,如果您知道使用Python解决问题,则不应该有任何问题。 查看文档关于creating vectors

+0

我曾经为此创建了一个函数,这是非常复杂的,我不确定它可以应用到多大范围。现在我认为,与这个运营商,生活可以更容易:) – ligwin 2010-08-07 12:01:59

2

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

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

将返回与50的 “0” 的作为初始值的名为 “newVector” 载体。将新标量添加到现有矢量以获得扩展矢量也是相当常见的,例如,

aVector <- c(aVector, newScalar)

3

要创建一个空的载体使用:

vec <- c(); 

请注意,我不是在矢您需要的类型,例如任何假设数字。

一旦载体已创建可以如下添加元素到它:

例如,添加的数字值1:

vec <- c(vec, 1); 

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

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

你真的试过这个? 'vec < - c()'将vec设置为'NULL'。如果你想要一个空向量,你可以使用'vec < - character()','vec < - numeric()'等 – 2015-10-09 16:25:54

相关问题