为什么这些功能不同?

时间:2018-06-15 15:16:55

标签: r

我不确定为什么我会从这些功能中获得不同的结果。

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

为什么两个函数都不会以与?

相同的方式改变x
x[x==5] <- -10

1 个答案:

答案 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值。