2016-11-16 76 views
1

首先,我的英语不太正确,所以我提前为我的问题中的任何语法错误/错误表示歉意。返回使用函数列表的结果返回()

我有这样的一般功能:

.my_fun <- function(x,y,...){ 
     <body> 
     return(
       list(
        fun1 <- function(x){ 
          <bodyfun1> 
         }, 
        fun2 <- function(y){ 
          <bodyfun2> 
         }, .... 
       ) 
      ) 
} 

用作辅助:

.my_funfun <- .my_fun(x,y,...) 

,并使用 “.my_funfun” 为给定的一个代码启动器 “my_fun”

的ARGS

我必须返回给定顺序的值,当然返回列表正文中包含的函数的结果。通常,我会分别处理函数,将结果存储在单独的对象中,并将这些对象的值放入列表中,然后返回该列表(最简单的方法),但我需要保留之前显示的结构。

我的问题是:有什么办法解决列表正文中的函数并返回这些值,保持给定的结构?或者是否不可能以这种方式使用回报?我已经使用return()作为过早的函数塞子,并且用作控制结构中对象的奇特打印机,但这种用法对我来说是新的。

如果您需要我可以提供的特定代码元素。

在此先感谢。

+1

具体代码元素示例和期望的输出肯定会有所帮助 –

+0

谢谢Pierre,我已经找到了答案。 –

回答

0

好的,做些事情,我意识到我的代码错误是什么。事情是,当我打电话

myfun$fun1 

我没有得到答案。上榜的正确的方法是

.my_fun <- function(x,y,...){ 
    <body> 
    return(
     list(
      fun1 = function(x){ 
        <bodyfun1> 
        }, 
      fun2 = function(y){ 
        <bodyfun2> 
        }, .... 
      ) 
     ) 
} 

这样我就可以使用名称的“FUN1,FUN2(...)的名称在axiliary function.s调用

例子:我想打线性同余随机发生器,用下面的代码:

.rCongLin <- function(a, c, m, x0){ 
    v1 <- x0 
    return(
      list(seed=function(xw){ 
          v1 <- xw}, 
        nxt=function(){ 
          v2 <- ((a*v1)+c)%%m 
          v3 <- v2/m 
          v1<<-v2 
          return(v3) 
        }, 
        shw=function(){ 
          return(list(a=a,c=c,m=m,x0=x0))} 
      ) 
    ) 
} 

指令:

.rCL <- .rCongLin(51864,35186,4153,1515) 

开始数GE neration给出的函数:

rCL=function(n){ 
     replicate(n,.rCL$nxt())} 
rCL(45) 

其中seed()重启X0,nxt()计算数字和shw()示出(为计算值)的内部状态。 rCL(n)返回n个副本。

的事情是,.rCL$x()(其中x()是提到的那些什么好玩的),如果你用“< - ”没有返回值运算符(改变它,以便ü有什么即时通讯谈论的演示),但它确实与返回“ =”。

答案是这些函数与'='一起工作,因为名字在'='列表中被分配(ü用列表中的'='命名),而不是'< - '。因此,为了使作品在“return(list(fun1, fun2...)”正文中“可引用”,您需要使用'='分配名称fun1, fun2...

这是一个简单的答案。在使用'='和'< - '时感到困惑,因为在原始代码中,每个赋值都使用'='完成。它容易混淆新颖的程序员喜欢我:(

非常感谢您的帮助! 再次对不起对该回答任何gramatical错误。 我希望这可以帮助更多的人。有一个工作

1

请尝试添加一个可重复的示例,以便他人帮助您。

无论如何,如果我正确地得到您的问题。然后你可以做到这一点。

my_fun <- function(x,y) { 
    fun1 <- function(x) { 
     length(x) 
    } 
    fun2 <- function(y) { 
     sum(y) 
    } 
    list(fun1(x),fun2(y)) 
}