将两个值作为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
如果我有一个列表
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