R中的函数参数求值
在过去的几周里,我一直在阅读哈德利·维克汉姆的《高级R》,其中有一个概念引起了我的注意,如果您能给我一个解释,我将不胜感激: 默认和用户的评估环境略有不同 提供的参数作为默认参数在 功能 本书给出了以下示例:R中的函数参数求值,r,function,default-arguments,R,Function,Default Arguments,在过去的几周里,我一直在阅读哈德利·维克汉姆的《高级R》,其中有一个概念引起了我的注意,如果您能给我一个解释,我将不胜感激: 默认和用户的评估环境略有不同 提供的参数作为默认参数在 功能 本书给出了以下示例: h05 <- function(x = ls()) { a <- 1 x } # ls() evaluated inside h05: h05() #> [1] "a" "x" # ls() evaluated in global
h05 <- function(x = ls()) {
a <- 1
x
}
# ls() evaluated inside h05:
h05()
#> [1] "a" "x"
# ls() evaluated in global environment:
h05(ls())
#> [1] "h05"
我想知道我在这里遗漏了什么,以及前面提到的规则是否只在我们根据函数调用中的其他参数定义和参数时才成立
非常感谢您的解释。在评论中讨论之后,以下是答案: 台词
y <- 6
x <- 5
它在全局环境中计算表达式4
和12
,以查找局部变量的值。全局变量x
和y
在此过程中不起作用
如果你打这样的电话
f1(x = 4, y = y <- x)
f1(x=4,y=y)这与函数中的x
和y
是与全局环境中的x
和y
不同的变量的答案相同
,这本书讨论的值是4和12。x
和y
是函数参数名。如果您使用了像f1(x=(x是的,完全正确。是的,有点。更准确地说,它是在函数头中定义的变量。它是在函数体中可见的变量。再次非常感谢您抽出时间回答我的问题。我真的很感激,我很高兴终于发现了这里的细微差别。
f1 <- function(x, y) {
x*2 + y
}
f1(x = 4, y = 12)
f1(x = 4, y = y <- x)