如何根据另一个列表的条件对R列表选择性应用函数?
解决方案
需求1实现
要同时遍历两个列表的对应元素并执行条件操作,mapply(或Map)是更合适的工具,它支持多输入列表的元素级配对处理。
代码示例:
mapply(function(x, y) { if (y >= 10) x + 100 else x }, list1, list2, SIMPLIFY = FALSE)
执行结果与预期一致:
[[1]] [1] 5 [[2]] [1] 108 [[3]] [1] 109
注:SIMPLIFY = FALSE参数确保输出保持列表格式,避免被自动简化为向量。
需求2实现
你之前的代码报错是因为lapply仅支持传入一个主输入列表,无法直接同时处理两个列表。改用mapply即可解决问题,调整函数内的计算逻辑如下:
代码示例:
mapply(function(x, y) { if (y >= 10) x + 100 - y else x }, list1, list2, SIMPLIFY = FALSE)
执行结果:
[[1]] [1] 5 [[2]] [1] 98 [[3]] [1] 98
如果需要在条件不满足时返回NULL或其他值,只需修改else后的内容即可。
另外,Map是mapply的简化版本,默认SIMPLIFY = FALSE,写法更简洁:
Map(function(x, y) if (y >= 10) x + 100 - y else x, list1, list2)
内容的提问来源于stack exchange,提问作者DaniCee
相关产品推荐
相关产品推荐

