【发布时间】:2020-05-12 12:47:51
【问题描述】:
我正在尝试遍历模式/字符串向量以匹配另一列中的字符串并将结果分配给与正在搜索的模式同名的列。下面是一个简单的例子。
我知道这个示例很简单,但它捕获了产生我无法解决的错误的最小情况。
> library(rlang)
> library(stringr)
> library(dplyr)
> set.seed(5)
> df <- data.frame(
+ groupA = sample(x = LETTERS[1:6], size = 20, replace = TRUE),
+ id_col = 1:20
+ )
>
> mycols <- c('A','C','D')
>
> dfmatches <-
+ lapply(mycols, function(icol) {
+ data.frame(!!icol := grepl(pattern = icol, x = df$groupA))
+ }) %>%
+ cbind.data.frame()
这给了我错误:
Error: `:=` can only be used within a quasiquoted argument
所需的输出将是如下所示的 data.frame:
> dfmatches
A C D
1 FALSE FALSE FALSE
2 FALSE FALSE FALSE
3 FALSE FALSE FALSE
4 FALSE FALSE FALSE
5 TRUE FALSE FALSE
6 FALSE FALSE FALSE
7 FALSE FALSE TRUE
8 FALSE FALSE FALSE
9 FALSE FALSE FALSE
10 TRUE FALSE FALSE
11 FALSE FALSE FALSE
12 FALSE TRUE FALSE
13 FALSE FALSE FALSE
14 FALSE FALSE TRUE
15 FALSE FALSE FALSE
16 FALSE FALSE FALSE
17 FALSE TRUE FALSE
18 FALSE FALSE FALSE
19 FALSE FALSE TRUE
20 FALSE FALSE FALSE
我已经使用{{}} 或!! rlang::sym() 等尝试了多种变体,但无法完全找出正确的语法。
【问题讨论】: