我想做一个类似apply / map的函数,但使用列表中的一个元素作为调用函数的操作数.
我给你一个更好的例子,假设我想减go 一个列表的每个元素,列表的第一个元素,即:x[i] = x[i] - x[1]
.
如果我理解正确的话,当使用Apply调用函数时,该函数只获取列表的当前元素x[i],但我需要列表本身来访问第一个元素(x[1]),并将其减go 当前元素(x[i]).
我希望有一种方法可以为应用函数提供额外的参数或对列表本身的访问.
我想做一个类似apply / map的函数,但使用列表中的一个元素作为调用函数的操作数.
我给你一个更好的例子,假设我想减go 一个列表的每个元素,列表的第一个元素,即:x[i] = x[i] - x[1]
.
如果我理解正确的话,当使用Apply调用函数时,该函数只获取列表的当前元素x[i],但我需要列表本身来访问第一个元素(x[1]),并将其减go 当前元素(x[i]).
我希望有一种方法可以为应用函数提供额外的参数或对列表本身的访问.
lapply
可以接受多个参数.
考虑列表lst
,
> lst
$X1
[1] 1 2 3
$X2
[1] 4 5 6
$X3
[1] 7 8 9
$X4
[1] 10 11 12
第一个是h
ot元素.
> h <- 1
然后,我们提供不带该元素的lst
作为迭代的第一个参数,并提供lst[[h]]
作为函数后面的第二个参数.与Map
形成对比的是,后者将始终作为一个整体通过.
> lapply(lst[-h], \(x, y) x - y, l[[h]])
$X2
[1] 3 3 3
$X3
[1] 6 6 6
$X4
[1] 9 9 9
如果你的目标是更换所有,但热元素,做
> lst[-h] <- lapply(lst[-h], \(x, d) x - d[[h]], lst)
> lst
$X1
[1] 1 2 3
$X2
[1] 3 3 3
$X3
[1] 6 6 6
$X4
[1] 9 9 9
Data:个
> dput(lst)
list(X1 = 1:3, X2 = 4:6, X3 = 7:9, X4 = 10:12)