2012-05-22 75 views
1

我想問一下我們如何能夠得到被嵌入另一個函數的函數的值,如下面的示例函數的值:返回嵌入另一個功能

message <- function() { 
    inside.message <- function() { 
     return("inside.message") 
    } 
} 

run.f <- function() { 
    return.inside.mesage <- message() 
    print(return.inside.mesage) 
}   

run.f() # We do not get "inside.message" 

謝謝你所有人

+0

非常感謝BenBarnes和Joshua Ulrich。真正直觀的答案。 –

回答

1

當你寫的,而如果評估message返回函數的函數,將返回「inside.message」。所以有幾種方法可以讓R打印「inside.message」。

第一種方式:

message功能,添加行return(inside.message())以便函數inside.message進行評估並返回結果,而不是返回本身的功能:

message <- function() { 
    inside.message <- function() { 
    return("inside.message") 
    } 
    return(inside.message()) 
} 

message() 
# "inside.message" 

然後評估run.f()也會打印「inside.message」。

第二種方式:

離開message因爲你擁有它,改變run.f()以下

run.f <- function() { 
    return.inside.mesage <- message() 
    print(return.inside.mesage()) 
} 

上面,你可以指定由message()返回到對象return.inside.message功能,然後評估該功能。

+0

哇,這只是令人毛骨悚然,我們如何開始我們的答案... –

+0

我們已經進入了黃昏區。 – BenBarnes

+0

我敢打賭,我們是久違的雙胞胎,在出生時分居。 –

1

正如你所寫,message返回函數inside.message,因爲你沒有明確地返回任何東西,它是在message裏面評估的最後一個表達式。

你似乎希望它從評估inside.message,這需要message另一行代碼返回值:

message <- function() { 
    inside.message <- function() { 
     return("inside.message") 
    } 
    inside.message() 
} 
2

在你的代碼消息()中返回一個函數。要調用它,你需要添加括號的一對額外的:

> message()() 
[1] "inside.message" 

如果更換的消息消息()()()在你的代碼會做你想要什麼。

+0

這很巧妙你 –

+0

謝謝@Apostolos :)我也喜歡R,以便我們可以在括號後面添加配件(與方括號一起使用)。這個表示法很短,而且很有效。 –