我对以下类型的函数有疑问:
fun.name <- function(x,y) {
a<-x
b<-y
for (i in c(a, b)){
i<-i+1
print (i)
}
print(a)
print(b)
}
fun.name(1, 2)
结果是
[1] 2
[1] 3
[1] 1
[1] 2
如果我不创建任何a和b,而仅保留x和y(fun.name <- function(x,y) { for (i in c(a, b))...
),则将获得相同的结果。
我无法理解这种行为。
我想要的是一个向每个参数添加一个并打印结果的函数。在函数中定义循环时,为什么循环不修改变量a和b?我猜这是环境的问题,而且我还不了解函数参数的性质。
谢谢您的任何建议。
答案 0 :(得分:2)
我实际上希望看到您当前的输出。这是格式化后的代码,带有注释的解释:
fun.name <- function(x,y) {
a <- x
b <- y
for (i in c(a, b)) { # i in (1, 2)
# first iteration: i = 2, print 2
# second iteration: i = 3, print 3
i <- i+1
print(i)
}
print(a) # prints 1 (a was only assigned once)
print(b) # prints 2 (same reason as above)
}
fun.name(1, 2)
在函数中对a
和b
进行初始分配后,它们没有任何变化。但是,即使发生了更改,变量a
和b
甚至在功能范围之外甚至都不可见。