r - 使用三点 "..."参数的奇怪错误

标签 r ellipsis

我需要帮助弄清楚这里发生了什么。

g <- function(x, y=NULL, z=NULL) invisible(NULL)

h <- function(...) {
    args <- as.list(match.call(g))[-1]
    print(args)
    ## lapply(args, eval)
}

f <- function(...) {
    h(...)
}

函数 h() 打印未计算参数的命名列表,然后尝试 评估论点。

看看使用 z=3z=-3 调用 f 时会发生什么。

> f(1, z=3)
$x
[1] 1

$z
[1] 3

> f(1, z=-3)
$x
[1] 1

$z
..2

这个..2是什么?请注意,h(1, z=-3) 会产生不同的输出:

> h(1, z=-3)
$x
[1] 1

$z
-3

最佳答案

第二个问题很简单。您有一个函数,它会产生从函数内部打印为最后调用的函数的副作用。 print 函数将其参数作为值返回,因此当函数退出时,控制台的读取-评估-打印行为会再次显示它。

第一个问题更深入地探讨了内部运作原理。省略号中的项目将获得临时名称:..1..2..3 等。使用减号时在 2 前面,您实际上是在应用一元运算符来更改其值。使用 log(2) 作为第二个参数,您会得到完全相同的结果:

> f(1,log(2))
$x
[1] 1

$y
..2

我认为当 f 的第二个参数是原子时 ..2 不出现的原因是需要不同的评估过程(或不需要评估)过程。角色对象也会发生相同的行为。

> f(1,"a")
$x
[1] 1

$y
[1] "a"

关于r - 使用三点 "..."参数的奇怪错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24760137/

相关文章:

qt5 - QComboBox 省略了所选项目上的文本

r - 使用 seq 矢量方式

python - 根据所使用的产品进行客户分割的 ML 模型

jquery - 使用 Jquery.dotdotdot 的间歇截断

javascript/php - 缩短字符串以适合特定的行数

Android TextVIew 基于 View 大小的省略号

css - 使用 CSS 将文本长度限制为 n 行

r - 如果变量观察出现在所有组中,则在 R 中过滤 tibble

r - 似乎无法删除食谱中的变量

r - 根据模式将 data.table 列拆分为许多未知数量的列