我有一个像这个假人的功能:
FUN <- function(x, parameter){
if (parameter == 1){
z <- DO SOMETHING WITH "x"}
if (parameter ==2){
z <- DO OTHER STUFF WITH "x"}
return(z)
}
现在,我想使用apply在数据集上使用该函数。
问题是,apply(data,1,FUN(parameter=1))
不会工作,因为FUN不知道“x”是什么。 有没有办法告诉申请以“x”作为当前行/ col来调用FUN? `
答案 0 :(得分:29)
你想要apply(data,1,FUN,parameter=1)
。请注意函数定义中的...
:
> args(apply)
function (X, MARGIN, FUN, ...)
NULL
以及文档中的相应条目:
...:'FUN'的可选参数。
答案 1 :(得分:17)
您可以在apply
的调用中创建一个匿名函数,以便FUN知道“x”是什么:
apply(data, 1, function(x) FUN(x, parameter = 1))
有关使用此方法的示例,请参阅?apply
。
答案 2 :(得分:3)
这是使用...
对象和*apply
传递参数的实际示例。它很光滑,这似乎是解释使用的一个简单例子。要记住的重要一点是,当您将参数定义为...
时,对该函数的所有调用都必须具有命名参数。 (所以R了解你想要放在哪里)。例如,我可以调用times <- fperform(longfunction, 10, noise = 5000)
,但是离开noise =
会给我一个错误,因为它正在通过...
我的个人风格是命名所有参数{} {{} 1}}只是为了安全。
您可以看到参数...
正在noise
的调用中定义,但是在调用fperform(FUN = longfunction, ntimes = 10, noise = 5000)
并且最终{{1}时未被用于另外两个级别}}
diff <- rbind(c(x, runtime(FUN, ...)))