【发布时间】:2019-12-14 00:15:13
【问题描述】:
我正在编辑包中的现有函数。目前,该函数接受数据框中的列名作为字符串。我正在更新函数以接受字符串名称或裸名称。但我遇到了一些问题。
我想采用的一般方法是将裸字符转换为字符串,因此不需要更新函数的其余部分。如果用户传递的是字符串列名,那么我不需要修改输入。
下面的代码将裸输入转换为字符串,但我不知道如何有条件地转换为字符串或不修改字符串。
test_fun <- function(by) {
# convert to enquo
by1 <- rlang::enquo(by)
# convert enquo to string
by2 <- rlang::quo_text(by1)
by2
}
# converts to string
test_fun(varname)
# not sure how to pass this unmodified
test_fun("varname")
【问题讨论】:
-
我强烈建议不要这样做,因为它不可避免地会导致歧义。让您的 API 有主见且明确,即接受名称或字符串,而不是两者。
-
感谢@KonradRudolph 的输入!我喜欢这个建议考虑到这一点,有没有办法要求裸输入,但打印一个字符串输入已被弃用的注释?这是我公司内许多人使用的包,如果我对 API 进行更改,我希望更改尽可能清晰。
-
实际上,弃用警告是不错的,而且我过去自己也做过。