什么是
=
和 ==
的区别?我发现在某些情况下,双等号可以使我的脚本正常运行,而一个等号会产生错误信息。何时应该使用 ==
而不是 =
?关于=
的含义要看上下文。==
用于测试相等性。
=
可以:
在大多数情况下 作为赋值运算符<-
的替代品使用。
> x = 10
> x
[1] 10
用作键值对的分隔符,在函数调用中用于为参数赋值。
rnorm(n = 10, mean = 5, sd = 2)
由于上文提到的第二点原因,=
不能在所有情况下替换 <-
。请考虑下面的例子:
> rnorm(N <- 10, mean = 5, sd = 2)
[1] 4.893132 4.572640 3.801045 3.646863 4.522483 4.881694 6.710255 6.314024
[9] 2.268258 9.387091
> rnorm(N = 10, mean = 5, sd = 2)
Error in rnorm(N = 10, mean = 5, sd = 2) : unused argument (N = 10)
> N
[1] 10
现在有些人可能认为rnorm(N <- 10, mean = 5, sd = 2)
是糟糕的编程,但它是有效的,你需要注意等号=
和赋值符号<-
之间的区别。
==
始终用于相等性测试:
> set.seed(10)
> logi <- sample(c(TRUE, FALSE), 10, replace = TRUE)
> logi
[1] FALSE TRUE TRUE FALSE TRUE TRUE TRUE TRUE FALSE TRUE
> logi == TRUE
[1] FALSE TRUE TRUE FALSE TRUE TRUE TRUE TRUE FALSE TRUE
> seq.int(1, 10) == 5L
[1] FALSE FALSE FALSE FALSE TRUE FALSE FALSE FALSE FALSE FALSE
但是,使用==
也要小心,因为它确实意味着完全相等,在涉及浮点运算的计算机上,您可能得不到您期望的答案。例如,从?'=='
:
> x1 <- 0.5 - 0.3
> x2 <- 0.3 - 0.1
> x1 == x2 # FALSE on most machines
[1] FALSE
> identical(all.equal(x1, x2), TRUE) # TRUE everywhere
[1] TRUE
all.equal()
函数测试相等性时会考虑到由于精度丢失和浮点运算而产生的一些模糊性。
Asia <- subset(countries, Continents == "Asia")
然而,这段代码将会正确运行: Asia <- subset(countries, Continents = "Asia")
- runlevel0=
基本上是分配(<-
)的同义词,但在将值传递到函数中时最常用。
==
是相等测试。
例子:
$test = 1;
if($test=2){
echo "Hello";
}
if($test==2){
echo "world";
}
//The result is Hello because = is assigning the value to $test and the second condition is false because it check the equality of $test to the value 2.
希望这能有所帮助。
=
表示赋值,==
表示逻辑比较。 - Andrew Taylorhelp("=")
和help("==")
。 - Rich Scriven