[英]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
,則它將被覆蓋-可以將append
或modifyList
用於不同的行為(未顯示):
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.