我正在尝试学习 R,但我不知道如何附加到列表中。
如果这是 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 循环”。
正如在评论中提到的:最好预先分配一个所需长度的向量,然后在循环中设置元素值。
这里有几种将值附加到向量的方法。他们都很气馁。
# 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")会回答你的问题并节省你写这个问题的时间(但会导致你养成坏习惯)。;-)
help("append")
请注意,这vector <- c()不是一个空向量;它是NULL。如果您想要一个空字符向量,请使用vector <- character().
vector <- c()
NULL
vector <- character()
如果 绝对必须 使用 for 循环,则应在循环之前预先分配整个向量。这将比附加更大的向量快得多。
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