- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
当我有大量复杂的代码块时,我通常会使用比要求更多的括号集。我的代码可能如下所示:
library(tidyverse)
mtcars %>%
mutate(name = rownames(.)) %>%
filter((cyl == 4 & grepl("Toyota", name)) |
((cyl == 6 | cyl == 8), grepl("Mazda", name)))
而不是这个:
mtcars %>%
mutate(name = rownames(.)) %>%
filter(cyl == 4 & grepl("Toyota", name) |
(cyl == 6 | cyl == 8, grepl("Mazda", name)))
我能说什么?在我的脑海中,括号保护帮助我更容易地理解德摩根定律、PEMDAS、计算顺序等。
这种对括号的随意使用带来了问题。尽管我认为额外的括号在 R 和 tidyverse 中应该是中性的,但它们似乎不是。看看我在下面的代码块中遇到的错误。
mtcars %>% filter((cyl == 4 & am == 1)) %>% .[1, 3]
# [1] 108
mtcars %>% filter((cyl == 4, am == 1)) %>% .[1, 3]
# Error: unexpected ',' in "mtcars %>% filter((cyl == 4,"
为什么上面的第一个示例可以运行,而第二个会抛出错误?我知道直接的答案是“你用了太多括号”,但为什么我不能呢?对我来说,在这些逻辑运算符巢穴噩梦中,它只会让生活更轻松。我知道 case_when()
函数在这种情况下确实有帮助。我仍然想知道为什么我不能使用额外的括号。谢谢。
最佳答案
这里的问题是您正在使用过滤器的“功能”,即传递给 ...
并用逗号分隔的条件是“自动”与 &
连接的>。但是使这项工作发挥作用的解析魔法还不够聪明,无法看穿一组括号。
所以它只看到一个条件,cyl == 4, am == 1
,它作为单个 bool 表达式在语法上并不是真正有效的。这也是我不喜欢这个功能,总是写出&
的原因之一。
我怀疑由于 filter
的这个功能实现起来相当复杂,因此尝试让它以更递归的方式解析条件并没有太大的好处。可能不令人满意的答案是,如果您正在做一些非常简单的事情,用逗号分隔的传递条件很好,但如果您的 bool 条件很复杂,您应该更明确。
关于r - 为什么 'neutral' 括号会导致 R 中的错误(或者可能是 tidyverse)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56568578/
我无法在附加行中显示“真”、“假”、"is"和“否”按钮。 我在这里有一个应用程序:Application 请按照以下步骤使用应用程序: 1。当你打开应用程序时,你会看到一个绿色的加号按钮,点击 在此
我是一名优秀的程序员,十分优秀!