我有一个有三个变量的函数
fcalc <- function(n1,n2,n3){
calc1 <- n1*5+n2*10-n3*2
)我希望将值: 1:2传递给n1,3:5传递给n2,6:9传递给n3
然而,当我尝试
list1 <-lapply(1:2,3:5,6:9,fcalc)
liat1我得到一个错误。
例如,当n1=1、n2=3和n3=6时,该函数将给出
calc1 <- 1*5+3*10-6*2
23
如果你能帮助我,我将不胜感激。
发布于 2019-11-18 01:52:07
如果您真正想要做的是为每个值组合获取calc1,那么这可能是您的解决方案:
fcalc <- function(x) {
x[1]*5+x[2]*10-x[3]*2
}
(df <- expand.grid(x1=1:2,x2=3:5,x3=6:9))
(df$calc1 <- apply(df,1,fcalc))发布于 2019-11-18 03:25:47
pmap的一个选项
library(purrr)
library(tidyr)
fcalc <- function(n1, n2, n3) n1 * 5 + n2 * 10 - n3 * 2
pmap_dbl(crossing(n1 = 1:2, n2 = 3:5, n3 = 6:9), fcalc)发布于 2019-11-18 02:04:37
您也可以使用outer()
fcalc <- function(x, y, z) {
c(outer(outer(x * 5, y * 10, FUN = "+"), z * 2, FUN = "-"))
}
fcalc(1:2, 3:5, 6:9)
[1] 23 28 33 38 43 48 21 26 31 36 41 46 19 24 29 34 39 44 17 22 27 32 37 42https://stackoverflow.com/questions/58903056
复制相似问题