答案是肯定的,目标是
sym()
就是把字符串解析成符号。你需要这个的原因在平等的左边可以看到
?filter
以下内容:
...: Logical predicates defined in terms of the variables in
â.dataâ. Multiple conditions are combined with â&â. Only rows
where the condition evaluates to âTRUEâ are kept.
filter( starwars, "birth_year" == 19 )
将始终不返回任何结果,因为
string literal
"birth_year"
从不等于整型文字
19
(它被隐式地强制为字符文本
"19"
相比之下)。通过使用
sym
,您正在有效地将该字符串解析为符号,强制
filter
查看名为
birth_year
在数据帧中
starwars
,而不是文字字符串
“生日年”
.
相反,你
不要
需要
叙()
在方程的右边,因为没有列
十九
在里面
星际大战
你对实际的文字价值感兴趣
十九
相反。如果要比较数据框中的两列,则需要
叙()
在平等的两边。例如,
name1 <- "skin_color"
name2 <- "eye_color"
filter( starwars, !!sym(name1) == !!sym(name2) )
# # A tibble: 6 x 13
# name height mass hair_color skin_color eye_color birth_year gender homeworld
# <chr> <int> <dbl> <chr> <chr> <chr> <dbl> <chr> <chr>
# 1 Wick⦠88 20 brown brown brown 8 male Endor
# 2 Jar ⦠196 66 none orange orange 52 male Naboo
# 3 Eeth⦠171 NA black brown brown NA male Iridonia
# 4 Mas ⦠196 NA none blue blue NA male Champala
# ...