向量化运算往往可以将逻辑应用于向量的每个元素。
但是,假设我有一个向量,即
> 1:10
[1] 1 2 3 4 5 6 7 8 9 10
我想对除第一个和最后一个元素之外的每个元素应用一个函数,例如乘以 0.5:我想将它们乘以 0.3。
有 dplyr (或任何其他矢量化)方法可以做到这一点吗?
我知道使用 if-else 结构的 sapply 可以达到目的,即
sapply(seq(1:10), #I know seq() is not actually needed in this particular case
function(i) {
if(i == 1 | i == length(1:10)) {
(1:10)[i]*0.3
} else {
(1:10)[i]*0.5
}
}
)
...但是具有索引相关 case_when 的矢量化解决方案会很好。
ifelse
已矢量化,因此您可以使用
x <- 1:10
x * ifelse(x %in% c(1, length(x)), 0.3, 0.5)
#[1] 0.3 1.0 1.5 2.0 2.5 3.0 3.5 4.0 4.5 3.0
这是另一个具有相同逻辑但没有
ifelse
。
x * c(0.5, 0.3)[x %in% c(1, length(x)) + 1]