2016-11-16 85 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)) 
}