使用原生管道 |> 进行 R 条件评估

4

我们如何在本机R |> 管道中有条件地评估一步骤?

这篇文章展示了如何使用magrittr %>%管道来实现。

library(dplyr)

do_thing = TRUE

# Works with magrittr syntax leading into the `{ }` expression.
x <- iris %>%
  { if (do_thing) mutate(., Sepal.Length = Sepal.Length + 100) else . } |> 
  select(Sepal.Length)

# Errors with native pipe leading into the `{ }`
# NB: the placeholder after `mutate(_` is updated
# Error in { : 
#  function '{' not supported in RHS call of a pipe (<input>:2:3)
x <- iris |> 
  { if (do_thing) mutate(_, Sepal.Length = Sepal.Length + 100) else _ } |> 
  select(Sepal.Length)

1
Native Pipe 使用不同的占位符语法,即 _点击此处 查看完整的详细比较。 - shafee
更改占位符并不能解决问题。错误仍然是Error in { : function '{' not supported in RHS call of a pipe (<input>:2:3) - Lief Esbenshade
你到底想做什么?你的代码看起来像是想根据条件更改某些列的值,可能不需要用到if命令。因此,分享你的使用案例将会很有帮助。 - deschen
在处理大量相似文件时,我使用标准化的数据清洗流程。能够调用一个函数来运行所有清洗操作非常方便,但同时也可以通过参数关闭某些步骤,以避免对与其他文件稍有不同的文件造成问题。 - Lief Esbenshade
1个回答

2

谢谢!为什么在 ... else . }() 中需要最后的闭括号?我几乎理解了这个语法,但是忽略了那对括号,然后看到了 function '{' not supported in RHS call of a pipe (<input>:2:3) 的错误信息。 - Lief Esbenshade
这是你匿名函数的调用。如果没有这些括号,你只是定义了这个函数。 - Jan
当然!现在有意义了。谢谢你。 - Lief Esbenshade

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接