我正在尝试学习 R,但不知道如何 append 到列表。
如果这是 Python,我会的。 。 .
#Python
vector = []
values = ['a','b','c','d','e','f','g']
for i in range(0,len(values)):
vector.append(values[i])
如何在 R 中执行此操作?
#R Programming
> vector = c()
> values = c('a','b','c','d','e','f','g')
> for (i in 1:length(values))
+ #append value[i] to empty vector
最佳答案
在 for 循环中追加对象会导致每次迭代时都会复制整个对象,这导致很多人说“R 很慢”,或者“应该避免 R 循环”。
如BrodieG评论中提到:最好预先分配所需长度的向量,然后在循环中设置元素值。
这里有几种将值 append 到向量的方法。所有人都灰心丧气。
append 到循环中的向量
# one way
for (i in 1:length(values))
vector[i] <- values[i]
# another way
for (i in 1:length(values))
vector <- c(vector, values[i])
# yet another way?!?
for (v in values)
vector <- c(vector, v)
# ... more ways
help("append")
会回答你的问题并节省你写这个问题的时间(但会导致你养成坏习惯)。 ;-)
请注意vector <- c()
不是空向量;这是NULL
。如果您想要一个空字符向量,请使用 vector <- character()
.
循环前预分配向量
如果您绝对必须使用for循环,则应在循环之前预先分配整个向量。这比 append 较大的向量要快得多。
set.seed(21)
values <- sample(letters, 1e4, TRUE)
vector <- character(0)
# slow
system.time( for (i in 1:length(values)) vector[i] <- values[i] )
# user system elapsed
# 0.340 0.000 0.343
vector <- character(length(values))
# fast(er)
system.time( for (i in 1:length(values)) vector[i] <- values[i] )
# user system elapsed
# 0.024 0.000 0.023
关于r - 将值 append 到 R 中的空向量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22235809/