将两个值作为R列表中的输入

Take two values as an input in R list

如果我有一个列表

sample <- list(a = c(1:5), b = c(11:15))

我想写一个像下面这样的函数

res <- lapply(sample, function(x) { sample$a + sample$b * 5})

结果就是

[1] 56 62 68 74 80

我知道这可以通过简单的方式实现sample$a + sample$b*5,但我有复杂的计算不属于它。

您可以使用 mapply

mapply(function(x,y) x+y*5, sample$a, sample$b)

另一种方法使用 do.call

do.call(function(a,b) a + b*5, sample)
[1] 56 62 68 74 80
如果出于某种原因必须使用列表,

mapply()do.call() 当然可以。但是,根据您的上下文,data.frame 可能是更好的数据结构。

使用dplyr

library(dplyr)
as.data.frame(sample) %>%
  mutate(result = a + b * 5)

或使用基函数:

d <- as.data.frame(sample)
transform(d, result = a + b * 5)

我们可以转换为 data.table 并执行此操作

library(data.table)
setDT(sample)[, a+b*5]
#[1] 56 62 68 74 80