这可能是重复的,但我似乎没有找到这个具体案例。
假设我有两个列表:
list1 <- as.list(c(5, 8, 9))
list2 <- as.list(c(8, 10, 11))
我知道如何将函数应用于一个列表。假设我想将以下内容应用于
list1
:
lapply(list1, function(x){x+100})
但是如果我只想将这样的函数应用于
list1
,当list2
中对应的值为>=10
时怎么办?所以我的结果是:
[[1]]
[1] 5
[[2]]
[1] 108
[[3]]
[1] 109
更重要的是,只有当
list1
中的值为 list2
时,如何才能将 list2
中的值与 100 相加并减去 >=10
中的值?
类似下面的东西,显然不起作用:
lapply(list1, list2, function(x,y){if (y>=10) x+100-y})
谢谢!
Map()
来迭代两个列表:
Map(
\(x1, x2) if (x2 >= 10) x1 + 100 else x1,
list1,
list2
)
# [[1]]
# [1] 5
# [[2]]
# [1] 108
# [[3]]
# [1] 109
或者第二种情况
Map(\(x, y) if (y >= 10) x + 100 - y else x, list1, list2)
。