簡體   English   中英

評估傳遞給R中函數的參數

[英]Evaluate argument passed to a function in R

我正在嘗試評估傳遞給R中的函數的參數並將其存儲在對象中。 無論我嘗試什么,如果我使用變量而不是變量的值分配參數,R都會一直為我提供變量名稱。

ar <- list()


f2 <- function(name, ..., env = parent.frame()) {
  arguments <- match.call()[-1]
  arguments <- arguments[setdiff(names(arguments), c("name", "env"))]
  env$ar[name] <- arguments
}

calibration <- 0.8

f2("sample", calibration = calibration) 

ar

$sample
calibration

代替

$sample
0.8

我不確定該如何解決。

嘗試這種單線。 請注意,無需在運行f3之前定義ar ,如果已定義ar ,則它將被覆蓋-可以將appendmodifyList用於不同的行為(未顯示):

f3 <- function(name, ..., env = parent.frame()) {
         env$ar <- setNames(list(list(...)), name)
}

# test
calibration <- 0.8
solution <- "ohoh"
f3("sample", calibration = calibration, solution = solution)

給予:

> ar
$sample
$sample$calibration
[1] 0.8

$sample$solution
[1] "ohoh"

好吧,如果人們對未來感興趣,我就找到了解決方案:

f2 <- function(name, ..., env = parent.frame()) {
  env$ar <- list()
  arguments <- as.list(match.call()[-1])
  arguments <- arguments[setdiff(names(arguments), c("name", "env"))]
  for (i in 1 : length(as.list(arguments))) {
    arguments[[i]] <- eval(arguments[[i]], envir = env)
  }

  env$ar[name] <- list(arguments)
}

calibration <- 0.8
solution <- "ohoh"
f2("sample", calibration = calibration)
ar 
f2("sample", calibration = calibration, solution = solution)
ar 
f2("sample", params = list(calibration = calibration, solution = solution))
ar 

暫無
暫無

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

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