在R中,什么时候才能正式声明data.frame?

时间:2013-01-30 16:23:37

标签: r

在其他R代码中,通常会看到在循环启动之前声明的data.frame。 假设我有2000行的数据帧data1。 在循环中,我通过web服务循环data1以创建新的data.frame data2。 (请不要建议不使用循环)。 在data2 $ result和data2 $ pubcount中,我需要为每个2000 data1项存储不同的值。

我必须在循环之前声明

data2=data.frame()

我是否必须告诉R我将在后面使用多少行和哪些列?我知道可以在不声明的情况下添加列。行怎么样?这样做有好处:

data2<-data.frame(id=data1$id)

我只想做我绝对要申报和做的事情。 为什么空声明在循环中给出错误一次?

稍后编辑:速度和内存不是问题。 10s与30s没有区别,我有100MB以下的数据和大型PC(8GB)。 Matrix不是一个选项,因为数据是数字和文本(混合),所以我必须使用非矩阵。

1 个答案:

答案 0 :(得分:3)

这样的事情:

df <- data.frame(a=numeric(n),b=character(n))

for (i in 1:n) {

#<do stuff>
df[i,1] <- ...
df[i,2] <- ...

}

你应该避免在循环中操纵data.frames,因为data.frames的子集是一个缓慢的操作:

a <- numeric(n)   
b <- character(n) 

for (i in 1:n) {

#<do stuff>
a[i] <- ...
b[i] <- ...

}
df <- data.frame(a,b)

当然,通常有比for循环更好的方法。但强烈建议避免生长物体(我不会教你如何做到这一点)。预分配如下所示。

为什么要预先分配?因为在循环中生长的对象是sloooowwwww,这是人们认为R中的循环缓慢的主要原因之一。