在使用...
提供的參數列表中簡單的功能,有可能是該功能查找名來自調用傳遞的對象的環境?如果是這樣,怎麼樣?R:獲得在'傳遞的參數名稱...`
這出現在問題printing matrices and vectors side by side的上下文中,但可能更一般。
在這種情況下,參數...
也可以包含字符串,但不需要名稱。這裏是我的MWE,我嘗試使用deparse(substitute())
,但無濟於事。
test_names <- function(...) {
# get arguments
args <- list(...)
chars <- sapply(args, is.character)
names <- sapply(args, function(x) if(is.character(x)) " " else deparse(substitute(x)))
names
}
測試:
A = matrix(c(0.5, 1, 3, 0.75, 2.8, 4), nrow = 2)
x = c(0.5, 3.7, 2.3)
y = c(0.7, -1.2)
b = A %*% x - y
> test_names(A, " * ", x, " - ", y, " = ", b)
[1] "X[[i]]" " " "X[[i]]" " " "X[[i]]" " " "X[[i]]"
>
我期望這個輸出是長度爲7的特徵向量:
[1] "A" " " "x" " " "y" " " "b"
令人驚訝這裏,結果是所有X[[i]]
,當有在任何地方都沒有提到X
。
繼@羅蘭的答案,這似乎做什麼,我想:
test_names2 <- function(...) {
argnames <- sys.call()
unlist(lapply(argnames[-1], as.character))
}
> test_names2(A, " * ", x, " - ", y, " = ", b)
[1] "A" " * " "x" " - " "y" " = " "b"
你得到那些從lapply。它不保留列表名稱。 – Roland
編輯顯示所需的輸出 – user101089