【问题标题】:How to append elements to a vector without changing its size?如何在不改变大小的情况下将元素附加到向量?
【发布时间】:2012-10-05 23:07:04
【问题描述】:

我想在不改变长度的情况下向向量添加元素。在每个 for 循环之后,向量应该只包含 500 行(1 列)。这是我目前所拥有的。

# initialize the vector
values<- vector(mode = "integer", length= 500)

for (i in 1:500) {
values<-append(values, 2i, after = i-1)
}

所以values 向量应该包含以下元素:2,4,6,8,10, ... 998, 1000

append 函数的问题是,如果我向向量添加一个元素,它会将向量的长度更改为 1。所以在 for 循环结束时,value 向量的长度将改为 1000 500 个,并包含以下元素:2,4,6,8, ... , 998, 1000, 0,0,0 [followed by zeros]

是否有另一个 R 函数可以满足我的期望,或者有什么方法可以修复上面的代码?

非常感谢任何帮助或建议。

【问题讨论】:

  • 我想你的意思是你想用不同的值替换向量的元素。
  • 追加是添加额外的元素,因此会增加长度。正如@Seth 所说,你想替换元素。
  • 不要采取错误的方式,但是如果您对将值分配给向量的子集感到困惑,那么您将真正受益于为自己准备一杯热饮并花费 60-90 分钟使用manual,它将回答此类最基本的问题。
  • 对不起,伙计们。我是 R 的初学者。感谢您的帮助。今晚晚些时候我会阅读手册。
  • 无需道歉,我只是想为您指出一些有用的东西。不要试图吸收整本手册;只需阅读足够的内容,以便您记得阅读相关内容并知道在哪里再次查找。

标签: r vector for-loop append


【解决方案1】:

一些问题

  • 向量只有长度,没有行和列
  • 对于 2 次 i,2i 不是您要查找的 r 代码,您需要 2*i2i 会给您复数 0+2i
  • 您正在寻找函数`[`(提取或替换对象的部分)

您是否只是想创建一个向量2,4,6,...,998,1000 如果是,那么

values <- seq(2,1000,by=2)

会起作用。

append 将追加,因此(根据R 和英文的定义)创建一个比原始向量更长的向量。

让你的循环按预期工作

# initialize a vector of 0's
values <- rep(0L, 500)

for (i in 1:500) {
  # replace the ith element with 2i
  values[i] <- 2*i
}

对于一个数组

values <- array(rep(0L,500), dim = c(500,1))

 for (i in 1:500) {
  # replace the ith element in the first column with 2i
  values[i,1] <- 2*i
 }

查看?`[`,了解如何提取或替换向量、列表、数组、data.frames 等元素的详细信息

如果你想要一个 500 行 1 列的矩阵,其中填充了2,4,6,8,...998,1000

values <- matrix(seq(2,1000,by=2), nrow = 500)

【讨论】:

  • 不,我想知道如何替换数组中的元素。向量中的元素只是一个例子。
  • 我为数组添加了一个示例。您正在寻找[append 不是你想要的!
  • @user1313954:替换元素包含在 mnel 的答案中——查看索引在哪里处理向量。
  • 啊,我明白了。谢谢你。对不起,伙计们。我是 R 的初学者。
  • 不用担心。 R 可以是不透明的,所以不要对自己太苛刻。只是想添加一个注释以记住 R 是从 1 开始索引的,而不是其他语言,如 C、Perl 等,其中索引是从 0 开始的。换句话说,C 中的 myArray[0] 将是 R 中的 myVector[1]
猜你喜欢
  • 1970-01-01
  • 2022-12-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-08
  • 2015-12-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多