Векторизация векторной конструкции в R посредством индексации - PullRequest
1 голос
/ 25 марта 2020

Я хотел бы построить атоми c вектор X, используя значения из вектора A, такие что length(X)>=length(A). Кроме того, значения X индексируются третьим вектором B, таким что length(B)=length(X). Отображение для построения X выглядит следующим образом:

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

Теперь мне ясно, как бы я построил вектор X в a для l oop. Мой вопрос: поскольку 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)

1 Ответ

1 голос
/ 25 марта 2020

Это очень просто векторизовать, так что вы можете избежать чрезмерного усложнения с помощью apply s или loops et c. - просто используйте B в качестве числового вектора для индексации значений A.

В вашем случае использование A[B] переводится в A[c(1,1,2,1,...,5)], что в основном говорит: «верните 1-й элемент 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]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...