使用基R管道创建表达式/调用

d7v8vwbk  于 2023-09-27  发布在  其他
关注(0)|答案(1)|浏览(131)

有没有办法做到以下几点

  1. ex1 <- quote(iris)
  2. ex2 <- quote(dplyr::filter(Species == "setosa" & Sepal.Width > 4))
  3. substitute(x %>% y, list(x = ex1, y = ex2))
  4. #> iris %>% filter(Species == "setosa" & Sepal.Width > 4)

使用基管而不是magrittr管?

  1. substitute(x |> y, list(x = ex1, y = ex2))
  2. #> Error: The pipe operator requires a function call as RHS
k0pti3hp

k0pti3hp1#

错误消息在这里实际上很有帮助。对于基管,您总是需要在右侧添加括号。这样做

  1. substitute(x |> y(), list(x = ex1, y = ex2))
  2. # (dplyr::filter(Species == "setosa" & Sepal.Width > 4))(iris)

产生一个调用。但是,您可能需要更改ex2以使调用有效:

  1. ex1 <- quote(iris)
  2. ex2 <- quote(\(x) dplyr::filter(x, Species == "setosa" & Sepal.Width > 4))
  3. substitute(x |> y(), list(x = ex1, y = ex2)) |> eval()
  4. # Sepal.Length Sepal.Width Petal.Length Petal.Width Species
  5. # 1 5.7 4.4 1.5 0.4 setosa
  6. # 2 5.2 4.1 1.5 0.1 setosa
  7. # 3 5.5 4.2 1.4 0.2 setosa

相关问题