我不确定为什么我会从这些功能中获得不同的结果。
change_it1 <- function(x) {
x[x == 5] <- -10
}
change_it2 <- function(x) {
x[x == 5] <- -10
x
}
x <- 1:5
x <- change_it1(x)
x
x <- 1:5
x <- change_it2(x)
x
为什么两个函数都不会以与?
相同的方式改变xx[x==5] <- -10
答案 0 :(得分:3)
赋值运算符<-
实际上是一个具有更改变量值的副作用的函数。但作为一个函数,它还无形地返回右侧用于赋值的值。我们可以使用print()
强制查看不可见值。例如
x <- 1:2
print(names(x) <- c("a","b"))
# [1] "a" "b"
或再次使用子集
print(x[1] <- 10)
# [1] 10
print(x[2] <- 20)
# [1] 20
x
# a b
# 10 20
在每种情况下,分配都会返回右侧值,而不是x
的更新值。函数将返回最后一个表达式返回的任何值。在第一种情况下,您将返回赋值返回的值(仅为值-10),在第二种情况下,您将显式返回更新的x
值。
这两个函数都以相同的方式更改x
(至少在函数的范围内),但是在这两种情况下你都不会返回更新的x
值。