如何解决在函数内部将省略号dotdotdot与dplyr :: if_else一起使用时找不到变量
我在R中有一个带有省略号(dotdotdot)的函数,如下面的示例所示,该函数被解析为dplyr :: if_else。但是,错误告诉我,变量确实在数据帧中时未找到。我的问题很简单,如何将函数的省略号解析为管道内的if_else条件?我还尝试了!!!
的替代方法,将...
替换为适当的参数名称,但也不起作用
如果这是一个重复的问题,我深表歉意,但是我在其他地方找不到明确的答案。
非常感谢你, 最好,
library(tidyverse)
#> Warning: package 'tibble' was built under R version 4.0.3
data("mtcars")
myfilter <- function(df,...) {
if (...length() != 0) {
df <- df %>%
mutate(
level = if_else(...,"high","low")
)
} else{
df <- df %>%
mutate(
level = "high"
)
}
return(df)
}
# WORKS
df <- myfilter(mtcars)
"level" %in% names(df)
#> [1] TRUE
# DOES NOT WORK
df <- myfilter(mtcars,drat > 3)
#> Error: Problem with `mutate()` input `level`.
#> x object 'drat' not found
#> i Input `level` is `if_else(...,"low")`.
myfilter2 <- function(df,condi = NULL) {
if (!(is.null(condi))) {
df <- df %>%
mutate(
level = if_else(!!!condi,"low")
)
} else{
df <- df %>%
mutate(
level = "high"
)
}
return(df)
}
# WORKS
df <- myfilter2(mtcars)
"level" %in% names(df)
#> [1] TRUE
# DOES NOT WORK
df <- myfilter2(mtcars,drat > 3)
#> Error in myfilter2(mtcars,drat > 3): object 'drat' not found
由reprex package(v0.3.0)于2020-10-15创建
解决方法
您可以使用listOfLists = []
with open(filename,"r") as msg:
for line in msg:
listOfLists.append(line.strip().replace(" ","").split(","))
msg.close()
捕获点中的值,并以一定程度使用enquos()
进行扩展。这对两种情况都适用。
!!!
您可以从Tidy评估指南的Dealing with multiple arguments的部分中获取更多信息
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。