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

时间:2016-04-13 17:57:15

标签: r list lapply

如果我有一个清单

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来实现,但是我有一些不属于它的复杂计算。

4 个答案:

答案 0 :(得分:2)

您可以使用mapply(function(x,y) x+y*5, sample$a, sample$b)

执行此操作
header('http://****/calendar.php:'.$url);

答案 1 :(得分:2)

使用do.call

的一种替代方法
do.call(function(a,b) a + b*5, sample)
[1] 56 62 68 74 80

答案 2 :(得分:1)

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

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

答案 3 :(得分:0)

如果由于某种原因必须使用列表,

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)