Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何直接从Github编译R包二进制文件?_R_Binaryfiles_Devtools_R Package - Fatal编程技术网

如何直接从Github编译R包二进制文件?

如何直接从Github编译R包二进制文件?,r,binaryfiles,devtools,r-package,R,Binaryfiles,Devtools,R Package,devtools包提供了通过install\u Github命令直接从Github安装包的可能性 使用devtoolspackage中的build命令,可以从本地文件夹编译R包二进制文件 也可以使用build直接从Github文件夹编译(而不是安装)R包二进制文件,例如build(“https://github.com/user/rpackage“?有趣的问题。我不知道有一个函数是为此目的构建的,但这并不意味着它不可能实现。我根据从devtools包中学习的几个非导出函数编写了一个函数 # de

devtools
包提供了通过
install\u Github
命令直接从Github安装包的可能性

使用
devtools
package中的
build
命令,可以从本地文件夹编译R包二进制文件


也可以使用
build
直接从Github文件夹编译(而不是安装)R包二进制文件,例如
build(“https://github.com/user/rpackage“

有趣的问题。我不知道有一个函数是为此目的构建的,但这并不意味着它不可能实现。我根据从
devtools
包中学习的几个非导出函数编写了一个函数

# devtools:::git_remote
# devtools:::remote
# devtools:::install_remotes
# devtools:::try_install_remote
# devtools:::install_remote
# devtools:::install
# devtools:::R 
# devtools:::remote_download.git_remote
功能
build\u from_git
需要安装
devtools
git2r
。此函数将获取git服务器上托管的R包的url,创建临时目录,克隆repo,构建包,将.tar.gz移动到工作目录,然后删除临时文件

请注意,我在这项工作中经常使用
,通常不推荐使用手册中提到的方法。然而,当您需要/想要使用来自另一个包的非导出函数时,这是一种合理的编程方法。参数与
devtools::install\u git
中的参数相同

build_from_git <- function(url, subdir = NULL, branch = NULL, credentials = NULL, progress = interactive()) {
  grmt <- devtools:::git_remote(url, subdir = subdir, branch = branch, credentials = NULL)

  bundle <- "__temp__"
  git2r::clone(grmt$url, bundle, credentials = grmt$credentials, progress = progress)

  if (!is.null(grmt$branch)) {
    r <- git2r::repository(bundle)
    git2r::checkout(r, grmt$branch)
  }
  on.exit(unlink(bundle, recursive = TRUE), add = TRUE)

  sourcepkg <- devtools::as.package(devtools:::source_pkg(bundle, subdir = grmt$subdir))
  on.exit(unlink(sourcepkg, recursive = TRUE), add = TRUE)

  devtools:::R("CMD build . ", path = "__temp__")
  system("mv __temp__/*.tar.gz .")
}
您应该在工作目录中看到
.tar.gz
文件

上述工作的会话信息为:

> sessionInfo()
R version 3.4.1 (2017-06-30)
Platform: x86_64-pc-linux-gnu (64-bit)
Running under: Debian GNU/Linux 9 (stretch)

Matrix products: default
BLAS: /usr/lib/openblas-base/libblas.so.3
LAPACK: /usr/lib/libopenblasp-r0.2.19.so

locale:
 [1] LC_CTYPE=en_US.UTF-8       LC_NUMERIC=C              
 [3] LC_TIME=en_US.UTF-8        LC_COLLATE=en_US.UTF-8    
 [5] LC_MONETARY=en_US.UTF-8    LC_MESSAGES=en_US.UTF-8   
 [7] LC_PAPER=en_US.UTF-8       LC_NAME=C                 
 [9] LC_ADDRESS=C               LC_TELEPHONE=C            
[11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C       

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

loaded via a namespace (and not attached):
[1] compiler_3.4.1  withr_1.0.2     memoise_1.1.0   git2r_0.19.0   
[5] digest_0.6.12   devtools_1.13.2

没有检查是否可能,但是下载包并在本地构建它有什么缺点吗?在R中只需一个命令就可以更方便地完成。
> sessionInfo()
R version 3.4.1 (2017-06-30)
Platform: x86_64-pc-linux-gnu (64-bit)
Running under: Debian GNU/Linux 9 (stretch)

Matrix products: default
BLAS: /usr/lib/openblas-base/libblas.so.3
LAPACK: /usr/lib/libopenblasp-r0.2.19.so

locale:
 [1] LC_CTYPE=en_US.UTF-8       LC_NUMERIC=C              
 [3] LC_TIME=en_US.UTF-8        LC_COLLATE=en_US.UTF-8    
 [5] LC_MONETARY=en_US.UTF-8    LC_MESSAGES=en_US.UTF-8   
 [7] LC_PAPER=en_US.UTF-8       LC_NAME=C                 
 [9] LC_ADDRESS=C               LC_TELEPHONE=C            
[11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C       

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

loaded via a namespace (and not attached):
[1] compiler_3.4.1  withr_1.0.2     memoise_1.1.0   git2r_0.19.0   
[5] digest_0.6.12   devtools_1.13.2