【发布时间】:2021-12-18 03:18:40
【问题描述】:
我观察到 filter() 函数的行为让我有点困扰。
我想从 tibble 中选择符合简单标准的行,它们在特定列中有一些值。该值存储在一个变量中。超级简单的东西。问题是我的变量名与 tibble 的列名相同,这会产生我没想到的行为。
>block
[1] 41
>msg %>% filter(text == "trial_run" & block == block)
# A tibble: 42 × 4
...1 block time text
<dbl> <dbl> <dbl> <chr>
1 14 1 1149175 trial_run
2 30 2 1164422 trial_run
3 46 3 1193408 trial_run
4 62 4 1199713 trial_run
5 78 5 1211763 trial_run
6 94 6 1218312 trial_run
7 110 7 1222947 trial_run
8 126 8 1236795 trial_run
9 142 9 1247513 trial_run
10 158 10 1254297 trial_run
# … with 32 more rows
我假设 block == block 产生类似 1 == 1 的重言式,因此我的块标准没有应用。一个简单的解决方案就是更改块变量的名称。
> blk <- block
> msg %>% filter(text == "trial_run" & block == blk)
# A tibble: 1 × 4
...1 block time text
<dbl> <dbl> <dbl> <chr>
1 654 41 1513347 trial_run
但我觉得这种情况可能会导致我将来遇到难以跟踪的错误。我究竟做错了什么?我以后如何避免这个问题(除了创建唯一的变量和列名)?
【问题讨论】: