【问题标题】:Vectorized vector construction in R through indexing通过索引在 R 中构建矢量化向量
【发布时间】:2020-07-05 16:07:43
【问题描述】:

我想使用来自向量A 的值构造一个原子向量X,例如length(X)>=length(A)。此外,X 的值由第三个向量B 索引,使得length(B)=length(X)。构造X的映射如下:

X[i] <- A[B[i]]

现在,我很清楚如何在 for 循环中构造向量 X。我的问题是:由于X 应该很大(length(X) ~ 30,000),有没有办法矢量化X 的构造?也就是说,应用一个避免逐个元素计算的覆盖函数。我研究了诸如sapply 和mapply 之类的函数,但我没有看到如何将向量B 的索引合并到这些函数中。

例如,如果:

A <- c(20,31,17,110,87)
B <- c(1,1,2,1,1,3,4,3,5)   

我希望X 是:

X <- c(20,20,31,20,20,17,110,17,87)

【问题讨论】:

  • 您能否添加一个示例,说明您正在尝试做什么以及预期的输出?
  • 用示例更新

标签: r vector vectorization


【解决方案1】:

矢量化非常简单,因此您可以避免使用applys 或循环等使其过于复杂-只需使用B 作为数字矢量来索引A 的值。

在您的情况下,使用 A[B] 转换为 A[c(1,1,2,1,...,5)] 基本上是说“返回 A 的第一个元素,A 的第一个元素,A 的第二个元素,A 的第一个元素......第五个A"的元素。

A <- c(20,31,17,110,87)
B <- c(1,1,2,1,1,3,4,3,5)

A[B]

## > A[B]
## [1]  20  20  31  20  20  17 110  17  87

X <- A[B]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-06-18
    • 1970-01-01
    • 2021-04-29
    • 1970-01-01
    • 2018-04-20
    • 1970-01-01
    • 2021-05-07
    • 1970-01-01
    相关资源
    最近更新 更多