我正在使用两个函数,比如说Fun1和Fun2,它们都定义在一个包中,所以我无法更改它们。Fun1调用Fun2如下:
Fun1(x=a_number,y=a_string,fn=Fun2,...)
...使用的参数在哪里Fun2。
Fun1呼唤Fun2它的名字也是如此。如何在Fun2不显式调用参数名称的情况下传递参数?
假设这args是我要传递给的参数列表Fun2。如果我只想打电话,很 Fun2容易如下:
do.call(Fun2,args)
但是如果被它的名字Fun2调用,这种方式是行不通的。Fun1唯一的方法是显式编写参数,如下所示:
Fun1(x=a_number,y=a_string,fn=Fun2,param1=sth,param2=some_other_thing)
但是这种方式对我不起作用,因为Fun2(不仅仅是 2 个)的参数太多,而且我不知道用户想要更改哪些参数。也许用户只是想更改 param1,并将其他参数保留为默认值。
顺便说一句,以下内容不起作用,因为Fun1它的“fn”参数只接受函数名称:
Fun1(x=a_number,y=a_string,fn=do.call(Fun2,args))
编辑1:
fn=Fun2 (...)不起作用,因为“fn”参数Fun1只获取函数的名称,没有别的。
编辑2:
实际上Fun1isbaggedModel和Fun2is auto.arima,它们都在预测包中。这是一个例子:
vec.ts=ts(1:27,start=c(2016,1),frequency=12) #time series
num_blocks=3
block_size=24
baggedModel(vec.ts,
bootstrapped_series = bld.mbb.bootstrap(vec.ts,num_blocks,block_size),
fn=auto.arima,...)
因此,我正在寻找一种方法将一些参数传递给函数...将使用的部分auto.arima,而不明确提及参数的名称。