在R语言中,“=”和“==”有什么区别?

6
什么是 === 的区别?我发现在某些情况下,双等号可以使我的脚本正常运行,而一个等号会产生错误信息。何时应该使用 == 而不是 =

= 表示赋值,== 表示逻辑比较。 - Andrew Taylor
3
如果你遇到困难,还有帮助页面可供使用。help("=")help("==") - Rich Scriven
4个回答

18

关于=的含义要看上下文。==用于测试相等性。

=可以:

  1. 在大多数情况下 作为赋值运算符<-的替代品使用。

> 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()函数测试相等性时会考虑到由于精度丢失和浮点运算而产生的一些模糊性。


    我认为问题的出现是因为subset和similar函数: 假设我们有一个数据集,其中一个列是“大陆”。下面的代码将返回一个空的data.frame: Asia <- subset(countries, Continents == "Asia")然而,这段代码将会正确运行: Asia <- subset(countries, Continents = "Asia") - runlevel0

    7

    =基本上是分配(<-)的同义词,但在将值传递到函数中时最常用。

    ==是相等测试。


    3
    简单来说,以这两行代码为例:
    1) x = 10
    2) x == 10
    第一行代码(x = 10)的意思是“我命令x等于10”。
    第二行代码(x == 10)的意思是“我在问一个问题,x是否等于10?”。
    如果你先写“x == 10”,它会给出一个错误信息并告诉你找不到x。
    如果你写“x = 10”,那么x就会被存储为10。
    在你写完“x = 10”后,如果你写“x == 10”,它将会回应“TRUE”,表示“是的,x等于10,因为你让x等于了10”。但是如果你写“x == 11”或“x == 12”或“x == 10”以外的任何东西,它将会回应“FALSE”,表示“不,x不等于11、12或任何除了10以外的东西,因为你让x等于了10”。

    0
    • (=) 是一个赋值运算符,而 (==) 是一个等于运算符。
    • (=) 用于从右到左分配值,而 (==) 用于显示值之间的相等性。

    例子:

    $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.
    

    希望这能有所帮助。


    网页内容由stack overflow 提供, 点击上面的
    可以查看英文原文,
    原文链接