R:基于索引的应用于向量

R: index-based apply to vector

鉴于:

original_vector <- c(2, 2, 2, 3)
indices <- c(1, 0, 0, 1)

我想将某些功能应用到 original_vector,但基于 indices。例如如果函数是“递增 5”,我想要的输出将是 [7, 2, 2, 8].

我知道如何使用 for 循环来做到这一点,但我想使用 apply 系列中的一些东西。

类似的问题也有,不过好像比我自己的usecase复杂多了。

dplyr 中,您可以这样做:

library(dplyr)
data.frame(original_vector, indices) %>%
  mutate(original_vector = ifelse(indices > 0,
                                  original_vector + 5,
                                  original_vector))
  original_vector indices
1               7       1
2               2       0
3               2       0
4               8       1

如果您想使用 apply 家族的东西,请考虑 mapply 并提供两个向量。 mapply 和自定义函数 my_fun 有两个参数:original_vectorindices

my_fun <- function(vec, indices) {
  vec[indices == 1] <- vec[indices == 1] + 5
  vec
}

mapply(my_fun, original_vector, indices)

输出

[1] 7 2 2 8