R语言如何基于索引使用apply族函数对向量应用自定义操作
方案1:mapply多向量同步遍历(最简洁)
mapply原生支持多输入向量的逐元素对应计算,无需额外处理索引:
original_vector <- c(2, 2, 2, 3) indices <- c(1, 0, 0, 1) # 逐位置判断:indices为1时执行加5操作,否则保留原值 result <- mapply(function(val, idx) ifelse(idx == 1, val + 5, val), original_vector, indices) # 去除mapply默认生成的名称属性 unname(result)
输出结果:7 2 2 8
方案2:Map函数实现
Map是mapply的轻量封装,返回列表类型,转换为向量即可得到结果:
result <- unlist(Map(function(val, idx) ifelse(idx == 1, val + 5, val), original_vector, indices)) unname(result)
方案3:定位目标位置后用lapply处理
如果后续需要单独对目标位置做更复杂的批量操作,可先筛选位置再处理:
# 定位indices为1的所有位置 target_pos <- which(indices == 1) # 对目标位置的元素批量应用加5函数 original_vector[target_pos] <- unlist(lapply(original_vector[target_pos], \(x) x + 5)) original_vector
注:代码中\(x)是R 4.1+版本支持的匿名函数简写,低版本可替换为function(x)。
内容的提问来源于stack exchange,提问作者K--
相关产品推荐
相关产品推荐

