我有一个应用于数据框的函数,除了一些列。这些列可以使用tidyselection填充。
例如,考虑以下函数:
rename_upper = function(df, except=NULL){
except = names(select(df, {{except}}))
rename_with(df, ~ifelse(.x %in% except, .x, toupper(.x)))
}
rename_upper(iris, except=3:5) %>% names()
#> [1] "SEPAL.LENGTH" "SEPAL.WIDTH" "Petal.Length" "Petal.Width" "Species"
rename_upper(iris, except=starts_with("Pet")) %>% names()
#> [1] "SEPAL.LENGTH" "SEPAL.WIDTH" "Petal.Length" "Petal.Width" "SPECIES"
输出是好的,但是如果except
包含df
中不存在的列,我不希望它抛出错误。
例如,rename_upper(iris, except=6)
抛出错误,因为位置6不存在。
不幸的是,使用any_of()
不是一个解决方案,因为它会将except
限制为一个字符向量,我不能再使用tidyselection。
我能两全其美吗?
2条答案
按热度按时间3yhwsihp1#
也许可以使用
try
来查看在select
为except
列执行操作时是否有任何错误?如果
select
中出现错误并显示警告消息,则所有列都将重命名为toupper
。mzillmmw2#
试试看