R:获取在 `...`中传递的参数名称

标签 r parameter-passing expression-evaluation

在一个使用...提供参数列表的简单函数中,该函数是否可以找到从环境(调用环境)传递的对象的名称?如果是这样,怎么办?

这是在问题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

遵循@Roland的回答,这似乎可以满足我的要求:
test_names2 <- function(...) {
  argnames <- sys.call()
  unlist(lapply(argnames[-1], as.character))
}

> test_names2(A, " * ", x, " - ", y, " = ", b)
[1] "A"   " * " "x"   " - " "y"   " = " "b"  

最佳答案

使用sys.call:

test_names <- function(...) {
  argnames <- sys.call()
  paste(lapply(argnames[-1], as.character), collapse = "")
}
#[1] "A * x - y = b"

关于R:获取在 `...`中传递的参数名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39496333/

相关文章:

r - 运行for循环后如何保留标题名称

R:如何删除包含特定字符模式的字符串?

python - 在 python (JES) 中给函数一个操作

jsf - 如何从 JSF 页面在 URL 中传递 java.util.Date?

MySQL UDF/存储函数无法识别作为参数传递的表名

c++ - C++ 中 std::cout 的奇怪行为

R:居中heatmap.2键(gplots包)

R - 找不到函数 "cld"

java - 是否可以动态求解数学函数

java - 编写字符串评估函数