r - R 当赋值 (a<-b) 可以返回 FALSE 如果 b 不能返回 FALSE
问题描述
我在 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 <- hi 之类的东西如果 hi 不能为 FALSE 时再次返回 FALSE?
我试图在函数中引发错误,但我得到一个破坏条件的错误,而不是 FALSE。
解决方案
好吧,虽然min
可能无法返回布尔值,但“if”子句不一定需要布尔值。现在将它与 R 隐式返回操作的最后一个值结合起来,我们得到了该函数所利用的行为。
来自?bw.nrd0
:
它默认为标准偏差最小值的 0.9 倍和四分位距除以样本大小的 1.34 倍负五分之一幂(= Silverman 的“经验法则”,Silverman (1986, page 48, eqn (3.31)) )除非四分位数重合,否则肯定会得到肯定的结果。
现在如果我们检查如果lo
被赋值为 0 会发生什么?
if(!(lo <- 0))
print("We are now in the TRUE part of the if clause")
推荐阅读
- python - Pandas:如何对具有相同列标签的列上的数据框进行排序
- r - 为什么我的论点没有在 dplyr 过滤器中正确传递?
- java - 杰克逊 YAML 阅读器无法正确解析 yaml 文件
- javascript - 将多个图像上传到 Firebase 存储,然后将下载 URL 调用到 Firebase 数据库
- javascript - 如何在有或没有 lodash 的情况下正确迭代和解析 javascript 中的嵌套对象
- vim - 如何在 Vim 中设置无限文本宽度?
- python - 使用 Pyserial 延迟读取时的 Arduino 串行缓冲区溢出
- android - Android - 绘制堆积线(无图表)
- javascript - 如何在具有自己的“标题”属性的 React 组件中使用 HTML 标题属性?
- azure - Azure 服务总线:DeadLetterQueue 和 DeferQueue 有什么区别?