R 附加函数名,但参数较少
我需要为我的_函数(I,x)创建附加名称(其中R 附加函数名,但参数较少,r,function,assign,R,Function,Assign,我需要为我的_函数(I,x)创建附加名称(其中I可以是1到25之间的整数)。我希望它能像这样工作 我的_函数1(x)与我的_函数(1,x)相同 我的_函数2(x)与我的_函数(2,x)相同 我的_函数3(x)与我的_函数(3,x)相同 我的_函数25(x)与我的_函数(25,x)相同 实现这一目标的一种方法是: my_function1 <- function (x) my_function(1, x) my_function2 <- function (x) my_funct
I
可以是1到25之间的整数)。我希望它能像这样工作
- 我的_函数1(x)与我的_函数(1,x)相同
- 我的_函数2(x)与我的_函数(2,x)相同
- 我的_函数3(x)与我的_函数(3,x)相同
- 我的_函数25(x)与我的_函数(25,x)相同
my_function1 <- function (x) my_function(1, x)
my_function2 <- function (x) my_function(2, x)
my_function3 <- function (x) my_function(3, x)
...
但是它不起作用,因为i
是通过引用传递的,结果是
- 我的_函数1(x)与我的_函数(25,x)相同
- 我的_函数2(x)与我的_函数(25,x)相同
- 我的_函数3(x)与我的_函数(25,x)相同
我为什么要这么做?在效率方面,我正在改进其他人的R软件包,但同时我需要它与旧版本兼容。这称为Curry,是函数式编程的一部分
library(functional)
myf <- function(a,x) cat(a,x,"\n")
myf1 <- Curry(myf, a=1)
myf1(5)
for(i in seq(25)) assign(paste0("myf",i), Curry(myf,a=i) )
> myf15(5)
15 5
库(功能性)
myf我认为bquote
在这里会有所帮助:
for(i in 1:2){
assign(paste("my_function",i,sep=""), bquote( function(x) my_function( i = .(i) , x ) ) )
}
>my_function2
# function(x) my_function(i = 2L, x)
但问题仍然存在——为什么要这样做?好吧,您也可以使用base
函数来实现相同的结果
诀窍是在每次迭代时强制(force
)计算i
,并在.Globalenv
(或您喜欢的环境)中分配您的函数
my_函数欢迎使用SO。如果你下次发帖子,你会发现你会得到更好的答案。或者这次,因为你可以编辑你的帖子:-)@AriB.Friedman谢谢:)下次我会记得写一个可复制的例子。咖喱看起来很干净,工作也很完美,但在这种情况下,我宁愿使用一些标准的R函数,因为我真的不想安装任何额外的软件包。谢谢。@SimonO101去都柏林的路不止一条。很好地使用了bquote
。但是,我上面返回的内容在语法上是无效的!我只是从问题中复制粘贴。@SimonO101谢谢!!!我喜欢R中的“不止一种方法”哲学,我也不知道Curry
,在这种情况下也没有想到bquote
。有不止一种方法可以做到,但只有一种方法不能做到,我真的认为这是不应该做的事情。。。我打赌OP的下一个问题将是“我如何调用myu函数${I}()
来获取I
的某些值?好吧,我正在改进其他人的R包的效率,但同时我需要它与旧版本兼容。谢谢你的解决方案!
for(i in 1:2){
assign(paste("my_function",i,sep=""), bquote( function(x) my_function( i = .(i) , x ) ) )
}
>my_function2
# function(x) my_function(i = 2L, x)
my_function <- function(a, b) a + b
lapply(1:10, function(i) {
force(i)
assign(paste0("my_function", i), function(x) my_function(i, x), envir = .GlobalEnv)
}
)
my_function1(10)
## [1] 11
my_function9(10)
## [1] 19