在R中返回函数的函数

6

我想创造一个能够创建和返回新函数的函数。我尝试了以下代码,但不起作用。我需要:

myfunc <- function(W){

myfunc2=function(X){
Y=W%*%X
return(Y)
}
return(myfunc2)
}

我希望能在myfunc之外使用myfunc2。 有什么想法吗?


我认为这个问题更适合于编程部分的StackOverfow,因为它并不是一个纯粹的统计学问题。 - rocinante
2个回答

9

是的,它确实可以。从我的终端来看:

> myfunc <- function(W){
+     
+     myfunc2=function(X){
+         Y=W%*%X
+         return(Y)
+     }
+     return(myfunc2)
+ }
> myfunc()
function(X){
    Y=W%*%X
    return(Y)
}
<environment: 0x5034590>

我的意思是,如果你想真正地调用它,你需要以以下方式运行:
myfunc2 <- myfunc()

但除此之外,它似乎完全正常工作。如果你想将其隐式分配给全局环境,而不是必须分配给一个对象:

myfunc <- function(W){

    myfunc2=function(X){
        Y=W%*%X
        return(Y)
    }
    assign("name_you_want_in_the_global_environment",myfunc2, envir = .GlobalEnv)
    return(invisible())
}
myfunc()

有没有办法在不运行“myfunc2 <- myfunc()”的情况下完成? 我试图使得我只需要运行“myfunc(W)”,然后全局就定义了“myfunc2”。 - LJB

1

只需将myfunc的输出分配给一个函数对象,例如myfunc2。然后您可以像在全局环境中创建一样使用它。

> myfunc <- function(W){
+ 
+ myfunc2=function(X){
+ Y=W%*%X
+ return(Y)
+ }
+ return(myfunc2)
+ }
> W = diag(2)
> myfunc2 = myfunc(W)
> myfunc2
function(X){
Y=W%*%X
return(Y)
}
<environment: 0x1078a7a38>
> X = diag(2)
> myfunc2(X)
     [,1] [,2]
[1,]    1    0
[2,]    0    1


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接