gpt4 book ai didi

r - 除了短路之外,是否有理由在 '&&' 语句中更喜欢 '&' 而不是 'if'?

转载 作者:行者123 更新时间:2023-12-03 23:50:53 25 4
gpt4 key购买 nike

是的,我知道,关于 & 的用法有很多问题(例如,参见 this one)。对比 &&在 R 中,但我还没有找到专门回答我的问题的。

据我了解这些差异,

  • &进行逐元素的矢量化比较,就像其他算术运算一样。因此,如果两个参数的长度都 > 1,则它返回一个长度 > 1 的逻辑向量。
  • &&比较两个向量的第一个元素并总是返回长度为 1 的结果。此外,它会短路:cond1 && cond2 && cond3 && ...仅评估 cond2如果 cond1TRUE ,等等。这允许诸如 if(exists("is.R") && is.function(is.R) && is.R()) 之类的事情尤其意味着使用 &&在某些情况下是绝对必要的。

  • 此外, if发出警告

    the condition has length > 1 and only the first element will be used



    如果它的条件有多个元素。

    从这些初步判断,我认为更安全的是 &&&总而言之if不需要短路的语句。

    如果在计算过程中出现问题并且我不小心在 & 之一中有一个向量的论点,我收到警告,这很好。如果没有,一切都很好。

    另一方面,如果我使用 && ,并且我的计算和 && 之一出了问题的参数是一个向量,我没有收到警告。这不好。如果出于某种原因,我真的想比较两个向量的第一个元素,我认为显式而不是隐式这样做会更清晰。

    请注意,这与 R 程序员之间的共识相悖,也与 R 文档的建议相反。 (1)

    因此我的问题 : 除了短路还有什么原因导致 &&优于 &if声明?

    (1) 引用 help(&&) :

    '&' and '&&' indicate logical AND and '|' and '||' indicate logical OR. The shorter form performs elementwise comparisons in much the same way as arithmetic operators. The longer form evaluates left to right examining only the first element of each vector. Evaluation proceeds only until the result is determined. The longer form is appropriate for programming control-flow and typically preferred in 'if' clauses.

    最佳答案

    , 使用 &&除了短路之外,没有任何优点。

    然而,短路对于控制流来说非常可取,以至于它应该是默认值。 if语句不应采用矢量化参数 - 这就是 ifelse是为了。如果您将逻辑向量传递给 if通常,您会使用 any 将其收缩为单个逻辑值。或 all用于评估。

    短路的主要优点是避免冗长或容易出错的步骤(例如互联网连接 - 尽管这些应该通过 try 处理):

    #avoiding lengthy calculations
    system.time(if(FALSE & {Sys.sleep(2);TRUE}) print("Hello"))
    user system elapsed
    0.00 0.00 1.99
    system.time(if(FALSE && {Sys.sleep(2);TRUE}) print("Hello"))
    user system elapsed
    0 0 0

    #avoiding errors
    if(FALSE & {stop("Connection Failed");TRUE}) print("Success") else print("Condition not met")
    Error: Connection Failed
    if(FALSE && {stop("Connection Failed");TRUE}) print("Success") else print("Condition not met")
    [1] "Condition not met"

    很明显,为了利用这些功能,您必须事先知道哪些步骤耗时最长或容易出错,并适本地构建逻辑语句。

    关于r - 除了短路之外,是否有理由在 '&&' 语句中更喜欢 '&' 而不是 'if'?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29898873/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com