r - 将值 append 到 R 中的空向量?

标签 r list vector append

我正在尝试学习 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/

相关文章:

java - JCheckBox 列表错误?

c++ - 将 vector 的 vector 打印到 ostream

c++ - C++程序中的内存使用

r - 如何使用 insertUI 将文本输入转换为 Shiny 应用程序中的输出

r - 绘制邻接矩阵时定位不当 - R ggplot

python - 在 Python 中有效地交换列表元素

java - 使用递归迭代数组列表

c++ - 将函数放入命名空间会破坏 std::vector 的使用

r - data.frames 列表按行快速矢量化合并

r - 选择列表中数据帧的最长元素