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_vector
和 indices
。
my_fun <- function(vec, indices) {
vec[indices == 1] <- vec[indices == 1] + 5
vec
}
mapply(my_fun, original_vector, indices)
输出
[1] 7 2 2 8
鉴于:
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_vector
和 indices
。
my_fun <- function(vec, indices) {
vec[indices == 1] <- vec[indices == 1] + 5
vec
}
mapply(my_fun, original_vector, indices)
输出
[1] 7 2 2 8