为诸如&;之类的逻辑运算符提供数值参数是否是良好的编程实践;在R?

为诸如&;之类的逻辑运算符提供数值参数是否是良好的编程实践;在R?,r,logical-operators,R,Logical Operators,最近,我注意到一些人在R中使用“&”运算符的方式如下: c(1:5) & c(6:10) #[1] TRUE TRUE TRUE TRUE TRUE 或者另一个例子 c(-2:1) & c(3:6) #[1] TRUE TRUE FALSE TRUE 这里()是一位世界级的数据科学家最近使用这种方法的一个例子(参见第3行和第4行的例子) 起初,我试图弄清楚R在做什么,但很快就注意到所有非零数字都会自动转换为真,而零则会自动转换为假。稍后,我还在R-help文件中读到:

最近,我注意到一些人在R中使用“&”运算符的方式如下:

c(1:5) & c(6:10)
#[1] TRUE TRUE TRUE TRUE TRUE
或者另一个例子

c(-2:1) & c(3:6)
#[1]  TRUE  TRUE FALSE  TRUE
这里()是一位世界级的数据科学家最近使用这种方法的一个例子(参见第3行和第4行的例子)

起初,我试图弄清楚R在做什么,但很快就注意到所有非零数字都会自动转换为真,而零则会自动转换为假。稍后,我还在R-help文件中读到:

数字和复数向量将强制为逻辑值,并使用 零为假,所有非零值为真

我的问题是:

  • a、 )这种编程风格有什么好处?如果我不小心给R两个带“&”的数字向量,它将在没有任何警告的情况下提供基于自动转换的结果,这有点可怕(可能会做一些我甚至不打算做的事情)! b、 )是否应该要求逻辑运算符接受逻辑值作为参数

  • 其他编程语言是否允许将数字值自动转换为逻辑值?这是标准做法吗


  • 非常感谢您提供的任何见解

    它只会为您省去将数值转换为逻辑值的麻烦,仅此而已

    是的,其他语言也做同样的事情。例如在python中

    if 1:
        print("yes")
    

    你阅读了语言定义,所以你知道这是合法的。关于这是否是良好实践的一个大争论在这个网站上并不真正合适。为了为David的例子辩护,他从
    rbinom(n,1,0.5)
    中提取,这只会给出
    1
    0
    。使用
    1:5
    etc进行逻辑比较是相当令人困惑的。@user2554330感谢您提醒我这个问题可能与本网站的目标无关。