Downloading/installing 来自 github 的包正在转换底层 R 代码
Downloading/installing package from github converting underlying R code
我在 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),
有没有办法阻止这种情况或者为什么会这样?
引用 answer by Jim Hester on GitHub:
The way R code is displayed by lookup is handled solely by R's
internal layout code.
It is recommended you install packages with source references by
setting options("keep.source" = TRUE, "keep.source.pkgs" = TRUE)
to
ensure source references are available. If they are you will find the
output is exactly that in the original source file, e.g.
> lookup::lookup(dplyr:::rename.data.frame)
dplyr:::rename.data.frame [S3 method, closure] dataframe.R#L122-125
function(.data, ...) {
vars <- rename_vars(names(.data), !!! quos(...))
select_impl(.data, vars)
}
<environment: namespace:dplyr>
// c++ source: src/select.cpp#L79-L86
DataFrame select_impl(DataFrame df, CharacterVector vars) {
check_valid_colnames(df);
if (is<GroupedDataFrame>(df)) {
return select_grouped(GroupedDataFrame(df), SymbolVector(vars), SymbolVector(vars.names()));
} else {
return select_not_grouped(df, SymbolVector(vars), SymbolVector(vars.names()));
}
}
所以阻止这种情况发生的方法可能是 options("keep.source" = TRUE, "keep.source.pkgs" = TRUE)
。
我在 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),
有没有办法阻止这种情况或者为什么会这样?
引用 answer by Jim Hester on GitHub:
The way R code is displayed by lookup is handled solely by R's internal layout code.
It is recommended you install packages with source references by setting
options("keep.source" = TRUE, "keep.source.pkgs" = TRUE)
to ensure source references are available. If they are you will find the output is exactly that in the original source file, e.g.> lookup::lookup(dplyr:::rename.data.frame) dplyr:::rename.data.frame [S3 method, closure] dataframe.R#L122-125 function(.data, ...) { vars <- rename_vars(names(.data), !!! quos(...)) select_impl(.data, vars) } <environment: namespace:dplyr> // c++ source: src/select.cpp#L79-L86 DataFrame select_impl(DataFrame df, CharacterVector vars) { check_valid_colnames(df); if (is<GroupedDataFrame>(df)) { return select_grouped(GroupedDataFrame(df), SymbolVector(vars), SymbolVector(vars.names())); } else { return select_not_grouped(df, SymbolVector(vars), SymbolVector(vars.names())); } }
所以阻止这种情况发生的方法可能是 options("keep.source" = TRUE, "keep.source.pkgs" = TRUE)
。