为什么 Google 的 R 风格指南推荐使用 <- 而不是 =?
Why does Google's R style guide recommend <- for assignment, rather than =?
我读了the Google style guide for R。对于 "Assignment",他们说:
Use <-, not =, for assignment.
GOOD:
x <- 5
BAD:
x = 5
你能告诉我这两种赋值方法之间的区别是什么吗?为什么其中一种比另一种更受青睐?
我认为有两个原因。一是 <-
和 =
的含义根据上下文略有不同。例如,比较语句的行为:
printx <- function(x) print(x)
printx(x="hello")
printx(x<-"hello")
在第二种情况下,printx(x<-"hello")
也会分配给父范围,而 printx(x="hello") 只会设置参数。
另一个原因是出于历史原因。 R、S 和它们所基于的 "APL" 语言都只允许使用箭头键进行赋值(历史上只有一个字符)。参考:http://blog.revolutionanalytics.com/2008/12/use-equals-or-arrow-for-assignment.html
两者都用,只是上下文不同。如果我们没有在正确的上下文中使用它们,我们就会看到错误。看这里:
使用<-定义局部变量
#Example: creating a vector
x <- c(1,2,3)
#Here we could use = and that would happen to work in this case.
使用 <<- ,正如 Joshua Ulrich 所说,搜索父环境 "for an existing definition of the variable being assigned." 如果没有父环境包含变量,它分配给全局环境。
#Example: saving information calculated in a function
x <- list()
this.function <– function(data){
...misc calculations...
x[[1]] <<- result
}
#Here we can't use ==; that would not work.
使用 = 是为了说明我们如何在 argument/function 中使用某些东西。
#Example: plotting an existing vector (defining it first)
first_col <- c(1,2,3)
second_col <- c(1,2,3)
plot(x=first_col, y=second_col)
#Example: plotting a vector within the scope of the function 'plot'
plot(x<-c(1,2,3), y<-c(1,2,3))
#The first case is preferable and can lead to fewer errors.
然后我们使用 == 如果我们问一件事是否等于另一件事,就像这样:
#Example: check if contents of x match those in y:
x <- c(1,2,3)
y <- c(1,2,3)
x==y
[1] TRUE TRUE TRUE
#Here we can't use <- or =; that would not work.
我读了the Google style guide for R。对于 "Assignment",他们说:
Use <-, not =, for assignment.
GOOD:
x <- 5BAD:
x = 5
你能告诉我这两种赋值方法之间的区别是什么吗?为什么其中一种比另一种更受青睐?
我认为有两个原因。一是 <-
和 =
的含义根据上下文略有不同。例如,比较语句的行为:
printx <- function(x) print(x)
printx(x="hello")
printx(x<-"hello")
在第二种情况下,printx(x<-"hello")
也会分配给父范围,而 printx(x="hello") 只会设置参数。
另一个原因是出于历史原因。 R、S 和它们所基于的 "APL" 语言都只允许使用箭头键进行赋值(历史上只有一个字符)。参考:http://blog.revolutionanalytics.com/2008/12/use-equals-or-arrow-for-assignment.html
两者都用,只是上下文不同。如果我们没有在正确的上下文中使用它们,我们就会看到错误。看这里:
使用<-定义局部变量
#Example: creating a vector
x <- c(1,2,3)
#Here we could use = and that would happen to work in this case.
使用 <<- ,正如 Joshua Ulrich 所说,搜索父环境 "for an existing definition of the variable being assigned." 如果没有父环境包含变量,它分配给全局环境。
#Example: saving information calculated in a function
x <- list()
this.function <– function(data){
...misc calculations...
x[[1]] <<- result
}
#Here we can't use ==; that would not work.
使用 = 是为了说明我们如何在 argument/function 中使用某些东西。
#Example: plotting an existing vector (defining it first)
first_col <- c(1,2,3)
second_col <- c(1,2,3)
plot(x=first_col, y=second_col)
#Example: plotting a vector within the scope of the function 'plot'
plot(x<-c(1,2,3), y<-c(1,2,3))
#The first case is preferable and can lead to fewer errors.
然后我们使用 == 如果我们问一件事是否等于另一件事,就像这样:
#Example: check if contents of x match those in y:
x <- c(1,2,3)
y <- c(1,2,3)
x==y
[1] TRUE TRUE TRUE
#Here we can't use <- or =; that would not work.