【发布时间】:2021-03-05 09:26:23
【问题描述】:
我想优化我的代码。
我正在与 str_detect 合作进行很多选择,因为我想优化我的代码以供我选择,定义了一个 过滤器模式,基于外部定义的对象。我可以这样做,但我必须使用as.character() 剥离我的对象。有没有可能做到整洁?
演示问题的工作示例。这是经典的方式,很有效
> tbl %>% mutate(twentys = case_when(
+ str_detect(fruit, "20") ~ T) )
# A tibble: 4 x 3
x fruit twentys
<int> <chr> <lgl>
1 1 apple 20 TRUE
2 2 banana 20 TRUE
3 3 pear 10 NA
4 4 pineapple 10 NA
这就是我想象的我可以做到的方式,但事实并非如此
> twenty <- 20
> tbl %>% mutate(twentys = case_when(
+ str_detect(fruit, twenty) ~ T) )
Error: Problem with `mutate()` input `twentys`.
x no applicable method for 'type' applied to an object of class "c('double', 'numeric')"
i Input `twentys` is `case_when(str_detect(fruit, twenty) ~ T)`.
Run `rlang::last_error()` to see where the error occurred.
这是一种繁琐的方式,使用as.character(),我想优化一下。
> tbl %>% mutate(twentys = case_when(
+ str_detect(fruit, as.character(twenty)) ~ T) )
# A tibble: 4 x 3
x fruit twentys
<int> <chr> <lgl>
1 1 apple 20 TRUE
2 2 banana 20 TRUE
3 3 pear 10 NA
4 4 pineapple 10 NA
【问题讨论】:
标签: r pattern-matching tidyverse