簡體   English   中英

定義接收函數參數作為函數調用的R函數,而不對其求值

[英]define R function receiving a function argument as a function call without evaluating it

我正在尋找一個定義函數'f',該函數通過以下方式將函數作為參數接收:

f <- function(c,z(...))
{
  print(c) 
  z(...)
}

這樣,如果我定義:

f1 <- function(a) 
{
  print(a)
}
f2 <- function(a,b) 
{
  print(a) 
  print(b)
}

我可以通過以下方式調用“ f”:

f(1,f1(2))
1
2

f(1,f2(2,3))
1
2
3

我知道我可以這樣定義'f':

f <- function(c,z,...)
{
  print(c)
  z(...)
}

並調用“ f”:

f(1,f1,2)
f(1,f2,1,2)

但這很難理解,因為無法通過查看函數調用來看出f1 / 2是函數自變量,並且該特定函數使用以下自變量。

謝謝

這是您應該做的:

f = function(x,y){
    print(x)
    y
}

f1 = function(x,y){
    print(x)
    print(y)
}

請注意,第一個函數( f )具有第二個參數,並且不對其求值。

在這種情況下,您可以調用所需的函數:

> f(1,f1(2,3))
[1] 1
[1] 2
[1] 3

要么

> f(4,f1)(5,6)
[1] 4
[1] 5
[1] 6

在最后一種情況下, f(4,f1)返回一個函數,該函數隨后將由(5,6)求值。

f <- function(c,d)
{ 
  print(c) 
  d
}

f1 <- function(a)
{
  print(a)
}
f2 <- function(a,b) 
{
  print(a) 
  print(b)
}

測試:

> f(1,f2(2,3))
[1] 1
[1] 2
[1] 3

> f(1,f1(2))
[1] 1
[1] 2

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM