gpt4 book ai didi

r - R 如何解释...论点?

转载 作者:行者123 更新时间:2023-12-04 05:30:09 26 4
gpt4 key购买 nike

这个问题在这里已经有了答案:




8年前关闭。




Possible Duplicate:
How to use R's ellipsis feature when writing your own function?



我想知道 R 如何解释...论点?

例如考虑 makeContrasts(..., contrasts=NULL, levels)limma .你可以运行:
 > require(limma)
> makeContrasts(a + b, b+c, levels=letters[1:3])

Contrasts
Levels a + b b + c
a 1 0
b 1 1
c 0 1

并解释参数 a + b, b+c没有 a, bc已经被定义为 R 对象。

我试图做一个类似的功能:
foo = function(...) {
print(typeof(...))
}

> foo(a + b)
Error in typeof(...) : object 'a' not found

所以我真的很困惑什么类型的对象真正传递给 makeContrasts ?无论如何要修改这个对象?

最佳答案

它是一种“语言表达”。当您将其传递给 typeof 时解释器试图找到一个名称来匹配 a并失败,因此会产生错误。如果您使用处理“语言”类型项目的函数处理它,您会得到一个(更)合理的结果。

看看这个:

> a="aa"
> typeof(a+b)
Error in typeof(a + b) : object 'b' not found
> b="bb"
> typeof(a+b)
Error in a + b : non-numeric argument to binary operator

我们修复了 a 不存在的问题然后R解释器希望能够找到 b然后它意识到 +没有给出数字参数。所以解释器试图计算表达式 a+b以通常的方式并在遇到问题时报告问题。在我对你当时关于模仿的不完整问题的回答中 makeContrasts我提供了一种机制来查看 R 解释器对这个表达式做了什么:
 foo = function(...) {
e <- substitute(...)
e[[1]]
}

foo(a + b)
# `+`

当您想使用 typeof 检查工作区中非命名元素的性质时否则期望获得字符值,您需要 quote它:
> typeof(quote(a+b))
[1] "language"
> typeof(quote("a"))
[1] "character"

关于r - R 如何解释...论点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12737441/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com