我是R的新手,因此我是应用函数的新手。我没有在任何地方找到这个问题的答案,即使我有一种(不那么优雅)的解决方法。
考虑这个虚拟代码:
my.fun <- function(vector1, vector2, vector3 = NULL) {
# do stuff with the vectors
}
list1 <- mapply(FUN = my.fun, arg1, arg2, list(arg3), SIMPLIFY = FALSE)
假设arg1和arg2是我想在mapply函数内迭代的列表(长度相同),但是arg3只是一个我想在my.fun()中使用而不进行迭代的向量。我的问题是:如何在所有mapply函数迭代中将arg3放在my.fun()中?为了澄清,my.fun()中的vector3应该等于arg3,在my.fun()之外。
这样做的一种方法是:
list1 <- mapply(FUN = my.fun, arg1, arg2, rep(list(arg3), length(arg1)), SIMPLIFY = FALSE)
但看起来应该有更优雅的方式。
有没有办法指定哪些参数是迭代的,哪些不是?或者做同样的事情(使用apply-family函数)而不必创建相同内容的大量副本?
感谢您的任何建议。
答案 0 :(得分:2)
mapply()
有一个MoreArgs=
参数用于此目的。
例如:
par(mfcol=c(2,2), ann=FALSE, mar=c(1,1,1,1))
mapply(plot, x=1:4, y=4:1, col=1:4,
MoreArgs=list(xlim=c(1,4), ylim=c(1,4), pch=16, cex=3))
答案 1 :(得分:0)
执行此操作的一种方法是使用Map
函数和匿名函数。这是一个例子
myFunction <- function(arg1, arg2, arg3) {
arg1 + arg2 + arg3
}
arg1 <- 1:5
arg2 <- 5:1
arg3 <- 1
Map(function(arg1, arg2) myFunction(arg1, arg2, arg3=arg3), arg1, arg2)