【问题标题】:R Assign Same Value to Multiple Elements of a VectorR为向量的多个元素分配相同的值
【发布时间】:2014-08-19 07:48:10
【问题描述】:

我无法为向量的多个元素分配相同的值。这是我的非工作示例:

dog <- c()
year <- c(1980,1990)
for (i in 1:2){
     dog[(i*1):(i*12)]<- unique(year)[i]
}

我希望 dog 向量具有 12 个 1980 和 12 个 1990。但我得到的是 1980 和 1990,然后是 22 个 NA。下一步是什么?

【问题讨论】:

  • dog &lt;- rep(c(1980, 1990), each = 12) ?
  • 关于您的代码的几点说明: (1) 最好在循环和修改它之前预先分配您的向量(如果您知道它的最终“长度”);例如见x1 = c(); x2 = rep(NA, 1e5); system.time(for(i in 1:1e5) x1[i] = i); system.time(for(i in 1:1e5) x2[i] = i); identical(x1, x2)。 (2) 如果您可以只调用一次,请避免在循环内多次调用相同的函数 - 在这里,您可以在循环前将 unique(year) 保存在变量中,然后在循环内使用它。
  • (3) 这个特定的任务不需要循环,但我猜你可以使用dog[(((i - 1) * 12) + 1):(i * 12)] 之类的东西来解决这个问题。

标签: r loops vector elements


【解决方案1】:

如果你展开循环,你正在做的是

dog <- c()
year <- c(1980,1990)
dog[1:12]<- unique(year)[1]
dog[2:24]<- unique(year)[2]

这是

 [1] 1980 1990 1990 1990 1990 1990 1990 1990 1990 1990
[11] 1990 1990 1990 1990 1990 1990 1990 1990 1990 1990
[21] 1990 1990 1990 1990

第二个任务几乎覆盖了所有内容。我不确定您是否希望这些值交替出现,或者您是否希望将这些值组合在一起,但您可以使用

轻松创建这样一个向量
rep(year, each=12)
#  [1] 1980 1980 1980 1980 1980 1980 1980 1980 1980 1980
# [11] 1980 1980 1990 1990 1990 1990 1990 1990 1990 1990
# [21] 1990 1990 1990 1990

rep(year, times=12)
#  [1] 1980 1990 1980 1990 1980 1990 1980 1990 1980 1990
# [11] 1980 1990 1980 1990 1980 1990 1980 1990 1980 1990
# [21] 1980 1990 1980 1990

【讨论】:

    猜你喜欢
    • 2017-09-16
    • 2017-09-03
    • 2019-11-23
    • 1970-01-01
    • 2012-07-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多