- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我理解 dplyr::if_else()
和基础 ifelse()
之间的主要区别:前者在真假结果之间进行严格的类型检查。
但是我注意到另一个不同之处,我想知道这是预期的行为还是我只是做错了。
下面是一些简单的代码:
library(dplyr)
choose_number <- function() {
n <- readline("Choose a number between 1 and 4: ")
n <- as.integer(n)
if (between(n, 1, 4)) { return(n) }
else { return(NA_integer_) }
}
# base ifelse() - works perfectly
get_answer <- function(pick = FALSE, n = 2) {
n <- ifelse(pick, choose_number(), as.integer(n))
return(n)
}
# dplyr::if_else() - does not work in the same way
get_answer <- function(pick = FALSE, n = 2) {
n <- if_else(pick, choose_number(), as.integer(n))
return(n)
}
我希望 get_answer()
仅在 pick
参数为 TRUE 时调用 choose_number()
。否则它应该只返回 n
的值。它与上面代码中的基础 ifelse()
完美地做到了这一点,但不是 dplyr
版本。
但是,dplyr
版本不会返回错误或警告;它仍然调用 choose_number()
但忽略结果并只返回默认值 n
。
if_else
的 true
选项,choose_number()
将返回一个整数,false
也是如此选项。所以在我看来,应该满足 if_else
的类型检查功能。
最佳答案
原因是因为dplyr::if_else()
比ifelse()
更严格。
dplyr::if_else()
在执行之前需要检查 true
和 false
是相同的类型和类.由于 choose_number()
是一个函数,它需要先解析才能进行此类检查,因此即使您的 condition
为 FALSE,它也会运行。
关于r - dplyr::if_else() 没有正确运行一个函数作为结果,而 base ifelse() 运行得很好。为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60555268/
我正在努力寻找以下问题的答案。 我想通过向量搜索 data.frame 中的列。找到匹配项后,我希望利用“搜索向量”的元素来创建新列的新元素。请参阅下面的可重现示例。 colour % mutate(
我正在努力寻找以下问题的答案。 我想通过向量搜索 data.frame 中的列。找到匹配项后,我希望利用“搜索向量”的元素来创建新列的新元素。请参阅下面的可重现示例。 colour % mutate(
cpp_magic扩展了 C 预处理器通常可以完成的任务。(它是一个头文件,位于 GitHub 上, here 。) IF_ELSE(cond)(, )是一个 super 有用的宏! 如何在 cond
请引用下图 我想在 Ongoing_Fees 表上创建一个 After Insert 触发器,用于更新 VAT 表。但是,在将数据插入 VAT 表之前,应检查特定 Portfolio 的 VAT 字段
我在数据集中创建了不同职位描述的 flag 变量。我想将每个 flag==true 更改为另一个变量的同一行位置。 我已经尝试过 ifelse 和 if_else; 但我所能得到的只是 true 的更
我正在尝试创建一个函数,如果该列的类型为 char,则该函数将数据帧的数据类型转换为 factor,否则我不会更改任何内容。但这里的问题是我可以用 if else 语句做同样的事情,但不能使用 if_
我对Tidyverse相当精通,但始终使用ifelse()而不是dplyr if_else()。我想将此行为切换为默认值,以始终使用dplyr::if_else()并从代码中弃用ifelse()。 有
我有以下数据框: library(dplyr) df % rename_all(funs(stringr::str_replace_all(., "gh", "v"))) 我想结合使用 renam
dplyr具有矢量化条件 if_else和 case_when . 然而,这两者都急切地评估它们可能的输出( true/false 表示 if_else ,case_when 的公式的 RHS ):
我有以下数据框: library(dplyr) df % rename_all(funs(stringr::str_replace_all(., "gh", "v"))) 我想结合使用 renam
我在R中有一个数据框。我的目标是使用if_else语句创建一个新列。如果一行中的值等于字符串"company",则此新列的值将是data列中的值。否则,我想分配给NA值。 我不知道如何实现,下面的代码
我是 C 编程的新手,最近遇到了从 3 个数中找出第二大数的问题。我尝试使用 if...else,但它总是给出最小的数字作为输出。我在这段代码中犯的逻辑错误是什么? #include int main
我正在处理一个有很多时间戳的数据集。我尝试识别一些无效的时间戳并将其设置为 NA。因为 if_else()强制我在两个臂上使用相同的数据类型,我正在使用 as.POSIXct(NA)对此类缺失值进行编
最小示例 - 我收到了 3 个受试者对包含两个问题的调查问卷的 9 个回复: set.seed(1) df % group_by(ID) %>% if_else(FILTER_BY_DAYS_
我是编码世界的新手,刚刚开始学习 javascript。我试图设计一种表格类型的输出,但无法完成它。这就是我想要实现的目标 “一月 - 1 - 第 1 季度”和第二行“2 月 - 2 日 - 第 1
你能帮我解释一下这段代码吗?我对 if_else 中的三个参数特别困惑:runif (n()) % mutate(cut = if_else(runif(n()) % ggplot() +
你能帮我解释一下这段代码吗?我对 if_else 中的三个参数特别困惑:runif (n()) % mutate(cut = if_else(runif(n()) % ggplot() +
我正在尝试解决一个简单的问题。我检查特定条件,如果为真,我插入一个date值,否则插入NA(即留下一个空白单元格)。 为了让它工作,我使用了 if_else 但它顽固地拒绝工作(我已经投入了几个小时阅
我有一个字符变量,它有一些我想用 NA 替换的值(例如“N/A”;“NA”作为文本输入,而不是 R 的 NA 类型;其他文本响应。)我不想要的值替换为 NA 包含数字字符串,因此我尝试使用正则表达式来
问题 如何使用 dplyr 的 if_else() 函数使其输出为函数?使用 base 中的 ifelse() 这很简单,但是使用 if_else() 就会出错。这是有意为之的行为还是我无法正确地做到
我是一名优秀的程序员,十分优秀!