【问题标题】:R when an assignment (a<-b) could return FALSE if b cannot return FALSER 当赋值 (a<-b) 可以返回 FALSE 如果 b 不能返回 FALSE
【发布时间】:2021-11-20 16:54:04
【问题描述】:

我在 R 函数 bw.nrd0 中发现了一个非常奇怪的语法

bw.nrd0_test <- function (x)

{

    if(length(x) < 2L) stop("need at least 2 data points")

    hi <- sd(x)

    if(!(lo <- min(hi, IQR(x1)/1.34)))# qnorm(.75) - qnorm(.25) = 1.34898

        (lo <- hi) || (lo <- abs(x[1L])) || (lo <- 1.)

    0.9 * lo * length(x)^(-0.2)

}

什么时候赋值可以返回 FALSE?我认为 min() 函数在任何情况下都不会返回 FALSE。 我得到下面的语法,它一个接一个地尝试三个分配,并且第一个工作获胜,但是当类似 lo

我试图在函数中引发错误,但我得到一个破坏条件的错误,而不是 FALSE。

【问题讨论】:

  • if(!numeric_object)) 如果numeric_object!=0返回false
  • 您是否使用赋值运算符&lt;- 作为比较器&lt;
  • 不,我没有将它用作比较器

标签: r syntax


【解决方案1】:

好吧,虽然min 可能无法返回布尔值,但“if”子句不一定需要布尔值。现在将它与 R 隐式返回操作的最后一个值结合起来,我们得到了该函数所利用的行为。

来自?bw.nrd0

默认为 0.9 倍 标准差和四分位距的最小值 除以样本量的 1.34 倍为负五分之一 权力(= Silverman 的“经验法则”,Silverman(1986,第 48 页, eqn (3.31))) 除非当一个正数时四分位数重合 结果是有保证的。

现在如果我们检查如果 lo 被赋值为 0 会发生什么?

if(!(lo <- 0))
    print("We are now in the TRUE part of the if clause")

【讨论】:

  • 你是对的,检查表达式的输出是否为0是一种奇怪的方法
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-26
  • 2011-10-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多