通过apply将参数传递给迭代函数

时间:2011-01-21 15:37:09

标签: r

我有一个像这个假人的功能:

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? `

3 个答案:

答案 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, ...)))