R中用户定义函数的性能

R中用户定义函数的性能,r,function,parameters,R,Function,Parameters,我正在编写一个用户定义的函数,它接受10个参数和2个数据向量。这两个数据向量可以得到相当大的数据点(10K+数据点),函数需要进行大量的数学计算,并且需要经常查找传递给函数的参数值。 无论我是否编写: my.intensity=函数(参数、评估时间、事件时间){ s简短回答:收益是微不足道的。从编程角度来说,选择更有意义的参数。更有可能的情况是,您希望将10个参数组合在一起,以便更容易调用和操作 从这个测试中,看起来有10个参数的速度稍微快一些。在这个简单的例子中,增益实际上只是微不足道的(~2

我正在编写一个用户定义的函数,它接受10个参数和2个数据向量。这两个数据向量可以得到相当大的数据点(10K+数据点),函数需要进行大量的数学计算,并且需要经常查找传递给函数的参数值。 无论我是否编写:

my.intensity=函数(参数、评估时间、事件时间){


s简短回答:收益是微不足道的。从编程角度来说,选择更有意义的参数。更有可能的情况是,您希望将10个参数组合在一起,以便更容易调用和操作

从这个测试中,看起来有10个参数的速度稍微快一些。在这个简单的例子中,增益实际上只是微不足道的(~2%),所以只要你的函数写得不糟糕,你就不必担心它

myfun1 <- function(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10) {
  a1 + a2 + a3 + a4 + a5 + a6 + a7 + a8 + a9 + a10
}

myfun2 <- function(a) {
  a[1] + a[2] + a[3] + a[4] + a[5] + a[6] + a[7] + a[8] + a[9] + a[10]
}

x1 <- as.list(rnorm(10))
x2 <- list(rnorm(10))

> system.time(for (i in seq_len(1e6)) do.call(myfun1, x1))
   user  system elapsed 
   5.97    0.00    6.00 
> system.time(for (i in seq_len(1e6)) do.call(myfun2, x2))
   user  system elapsed 
   6.11    0.00    6.11 

myfun1您是否尝试过
system.time()有10个参数比让函数每次查看这些值更快,但在这一点上,你可能需要考虑和你的代码相比,可能很难实现的时间增益。简单的操作,你几乎看不出有什么区别:每个函数调用6微秒中有0.11微秒!而OP说他的函数做了大量的数学计算。所以OP想要的答案是“没有,没有显著差异”.顺便说一句,你没有准确地测试OP所描述的内容。但我认为结果是一样的,没有显著差异。我认为我在测试后的分析充分解释了这一点。没有他的用例,我们无法确定。查找似乎是加法函数的2%,因此除非该函数设计糟糕(嵌套循环,通过最小循环中的索引引用相同的值),速度是无关紧要的。“您可能不需要”、“我们不可能知道”、“您自己测试”、“我们无法确定”……您可能会更有说服力!