gpt4 book ai didi

r - 附加函数名称,但参数较少

转载 作者:行者123 更新时间:2023-12-04 17:01:38 27 4
gpt4 key购买 nike

这个问题在这里已经有了答案:





How to curry a ... argument by position in R?

(2 个回答)


9年前关闭。




我需要为 my_function(i,x) 创建附加名称(其中 i 可以是 1 到 25 之间的整数)。我希望它像这样工作

  • my_function1(x) 与 my_function(1,x)
  • 相同
  • my_function2(x) 与 my_function(2,x)
  • 相同
  • my_function3(x) 与 my_function(3,x)
  • 相同
  • ...
  • my_function25(x) 与 my_function(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)
    ...

    但由于其中有 25 个,因此将其置于循环中是合理的。为此,我尝试过:
    for(i in 1:25){
    assign(paste("my_function",i,sep=""),function(x) my_function(i,x))
    }

    但它从 i 开始不起作用通过引用传递,最终结果是
  • my_function1(x) 与 my_function(25,x)
  • 相同
  • my_function2(x) 与 my_function(25,x)
  • 相同
  • my_function3(x) 与 my_function(25,x)
  • 相同
  • ...

  • 如何按值传递“i”?或者也许还有其他方法...

    我为什么要这样做?我正在提高其他人的 R 包的效率,但同时我需要它与旧版本兼容。

    最佳答案

    这称为柯里化(Currying),是函数式编程的一部分。

    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

    我想这里有一个重要的问题,你为什么要这样做。这似乎正是您不希望有很多相关函数的参数的那种事情。

    关于r - 附加函数名称,但参数较少,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16384377/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com