使用 mapply() 或其任何家族成员通过向量调用函数
Using mapply() or any of its family members to call a function over vectors
我有一个包含多个矢量和非矢量参数的函数:
myfun <- function( number , vector1, vector2, number2) {
# test function thanks to Chi Pak
temp <- number * vector1 + max(vector2) * number2
return(temp)
}
我想执行以下操作:
- 为
number
、numberS
的向量调用此函数。
- 对于上面的每个数字,我希望用从列表
listofvectors1
. 中获得的每个 vector1
中的一个来调用它
vector2
和 number2
每次调用都相同。
为了更清楚地说明,这就是我要用循环做的事情:
numberS <- c(1,2,3)
listofvectors1 <- list(c(1,2,3), c(5,6,7,8), c(0,1) ) # Obviously has the same length as numberS
vector2 <- c(0.5,3,1)
number2 <- 3.14
for (i in 1:length(numberS)){
myfun(numberS[i], listofvectors1[[i]], vector2, number2)
}
我想使用像 apply()
这样的函数来做到这一点,我一直在尝试使用 mapply()
但我无法让它工作,因为它要么嵌套所有向量,要么根本不嵌套'不要嵌套任何东西。
可重现的例子
一个测试myfun
函数
myfun <- function( number , vector1, vector2, number2) {
temp <- number * vector1 + max(vector2) * number2
return(temp)
}
你的价值观
numberS <- c(1,2,3)
listofvectors1 <- list(c(1,2,3), c(5,6,7,8), c(0,1) ) # Obviously has the same length as numberS
vector2 <- c(0.5,3,1)
number2 <- 3.14
你可以这样使用lapply
lapply(1:length(numberS), function(x) myfun(numberS[x], listofvectors1[[x]], vector2, number2))
# [[1]]
# [1] 10.42 11.42 12.42
# etc
或者像这样purrr::map2
library(purrr)
map2(numberS, listofvectors1, ~myfun(.x, .y, vector2, number2))
# [[1]]
# [1] 10.42 11.42 12.42
# etc
使用 MoreArgs
参数指定您不想 向量化的那些参数。
mapply(myfun, NumberS, listofvectors1, MoreArgs=list(vector2, number2))
我有一个包含多个矢量和非矢量参数的函数:
myfun <- function( number , vector1, vector2, number2) {
# test function thanks to Chi Pak
temp <- number * vector1 + max(vector2) * number2
return(temp)
}
我想执行以下操作:
- 为
number
、numberS
的向量调用此函数。 - 对于上面的每个数字,我希望用从列表
listofvectors1
. 中获得的每个 vector2
和number2
每次调用都相同。
vector1
中的一个来调用它
为了更清楚地说明,这就是我要用循环做的事情:
numberS <- c(1,2,3)
listofvectors1 <- list(c(1,2,3), c(5,6,7,8), c(0,1) ) # Obviously has the same length as numberS
vector2 <- c(0.5,3,1)
number2 <- 3.14
for (i in 1:length(numberS)){
myfun(numberS[i], listofvectors1[[i]], vector2, number2)
}
我想使用像 apply()
这样的函数来做到这一点,我一直在尝试使用 mapply()
但我无法让它工作,因为它要么嵌套所有向量,要么根本不嵌套'不要嵌套任何东西。
可重现的例子
一个测试myfun
函数
myfun <- function( number , vector1, vector2, number2) {
temp <- number * vector1 + max(vector2) * number2
return(temp)
}
你的价值观
numberS <- c(1,2,3)
listofvectors1 <- list(c(1,2,3), c(5,6,7,8), c(0,1) ) # Obviously has the same length as numberS
vector2 <- c(0.5,3,1)
number2 <- 3.14
你可以这样使用lapply
lapply(1:length(numberS), function(x) myfun(numberS[x], listofvectors1[[x]], vector2, number2))
# [[1]]
# [1] 10.42 11.42 12.42
# etc
或者像这样purrr::map2
library(purrr)
map2(numberS, listofvectors1, ~myfun(.x, .y, vector2, number2))
# [[1]]
# [1] 10.42 11.42 12.42
# etc
使用 MoreArgs
参数指定您不想 向量化的那些参数。
mapply(myfun, NumberS, listofvectors1, MoreArgs=list(vector2, number2))