【问题标题】:Downloading/installing package from github converting underlying R code从 github 下载/安装包转换底层 R 代码
【发布时间】:2018-12-05 16:40:24
【问题描述】:

我在 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),

是否有办法阻止这种情况或为什么会发生这种情况?

【问题讨论】:

  • “当我检查它没有检查的代码时”是什么意思?
  • 查看我创建的类似问题的答案:github.com/jimhester/lookup/issues/19#issuecomment-339762967
  • @Aurèle:可能值得将解决方案解释为正式答案,以便它可以被赞成和接受,从而将问题从“未回答”类别中删除。

标签: r devtools rlang tidyeval


【解决方案1】:

引用answer by Jim Hester on GitHub

R 代码通过查找显示的方式仅由 R 处理 内部布局代码。

建议您安装带有源引用的软件包 将options("keep.source" = TRUE, "keep.source.pkgs" = TRUE) 设置为 确保源参考可用。如果他们是你会发现 输出与原始源文件中的完全相同,例如

> 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)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-06
    • 2019-02-03
    相关资源
    最近更新 更多