提问人:nbenn 提问时间:9/10/2023 更新时间:9/10/2023 访问量:66
使用基本 R 管道创建表达式/调用
Creating an expression/call using the base R pipe
问:
有没有办法做以下事情
ex1 <- quote(iris)
ex2 <- quote(dplyr::filter(Species == "setosa" & Sepal.Width > 4))
substitute(x %>% y, list(x = ex1, y = ex2))
#> iris %>% filter(Species == "setosa" & Sepal.Width > 4)
使用基管而不是 Magrittr 管?
substitute(x |> y, list(x = ex1, y = ex2))
#> Error: The pipe operator requires a function call as RHS
答:
8赞
jkd
9/10/2023
#1
错误消息在这里实际上非常有用。使用基础管道,您始终需要在右侧使用括号。所以做
substitute(x |> y(), list(x = ex1, y = ex2))
# (dplyr::filter(Species == "setosa" & Sepal.Width > 4))(iris)
确实会产生调用。但是,您可能希望更改调用以使其有效:ex2
ex1 <- quote(iris)
ex2 <- quote(\(x) dplyr::filter(x, Species == "setosa" & Sepal.Width > 4))
substitute(x |> y(), list(x = ex1, y = ex2)) |> eval()
# Sepal.Length Sepal.Width Petal.Length Petal.Width Species
# 1 5.7 4.4 1.5 0.4 setosa
# 2 5.2 4.1 1.5 0.1 setosa
# 3 5.5 4.2 1.4 0.2 setosa
评论