a %>% b(c),与 dplyr 无关,只是b(a, c) 的快捷方式。在您的代码中,这意味着编写
new_df <- `[<-`(old_df, new_df$column1, grepl("10", new_df$column1), NA)
(因为 R 中的 x[i] <- v 与 x <- `[<-`(x, i, value = v) 相同,其中 [<- 是执行子集替换的函数的名称。)
这显然是荒谬的。
(错误信息有点误导,因为幕后实际发生的事情更加复杂。我们不需要详细剖析,因为这显然不是你的想法。)
关键是你只能使用管道来代替最初解释的调用语法,而不是别的(不要试图把它放在任何地方)。不要试图强行将方形钉穿过圆孔。如果要替换某些值,请直接执行此操作:
new_df <- old_df
new_df$column1[grepl("10", new_df$column1)] <- NA
或者使用 dplyr:
new_df <- mutate(old_df, column1 = ifelse(grepl("10", column1), NA, column1))
...如果您愿意,现在可以用管道替换传统的函数调用语法,尽管它在这里并不能真正实现目的:
new_df <- old_df %>% mutate(column1 = ifelse(grepl("10", column1), NA, column1))