我在github上有一个私人的R包,我已经做了。
我经常使用!!rlang::sym(function_argument)来接受函数的输入,并与tidyverse一起使用。
例如:
example_function = function(x){
new = mtcars %>% arrange(desc(!!rlang::sym(x))
return(new)
}
example_function('mpg')所以我把这个上传到一个私有的github,然后如果我要安装它- devtools::install_git('myaccount/myrepo')
当我查看函数中的底层代码时
myinstalled_package::example_function它显示为!(!rlang::sym,无论我在哪里有!!rlang::sym。这个函数实际上仍然有效,但是,当我检查代码时,它没有工作。我查看了github,代码是正确的,就在我把它下载到我的计算机上时,我才有了这个非常烦人的转换。
我还看到了其他类似的更改,比如我将!!each_var :=转换为:=(!(!each_var),。
有什么办法阻止这件事吗?为什么会发生这种事?
发布于 2018-12-18 10:11:03
R代码通过查找显示的方式完全由R的内部布局代码处理。 建议您通过设置
options("keep.source" = TRUE, "keep.source.pkgs" = TRUE)来安装具有源引用的包,以确保源引用可用。如果它们是,您将发现输出与原始源文件中的完全相同,例如查找::dplyr:::rename.data.frame dplyr:::rename.data.frame S3方法,闭包dataframe.R#L 122-125函数(.data,.){ vars <- rename_vars(名称(.data),!!(.)select_impl(.data,vars) }< namespace:dplyr> // c++源: src/select.cpp#L79-L86 DataFrame select_impl(DataFrame df,CharacterVector vars) { check_valid_colnames(df);if (is(df)) { return select_grouped(GroupedDataFrame(df),SymbolVector(vars),SymbolVector(vars.names();
因此,阻止这种情况发生的方法可能是options("keep.source" = TRUE, "keep.source.pkgs" = TRUE)。
https://stackoverflow.com/questions/53636886
复制相似问题