通过索引在 R 中构建向量化向量

Vectorized vector construction in R through indexing

我想使用向量 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 的构造?即,应用避免逐个元素计算的一揽子函数。我研究了 sapplymapply 等函数,但没有看到如何将向量 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)

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

在您的情况下,使用 A[B] 转换为 A[c(1,1,2,1,...,5)],基本上是说 "return the 1st element of A, the first element of A, the second element of A, the first element of A... the fifth element of 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]