メモ:install_github()で「cp: unknown option -- )」とかいうエラーが出る

最近こんなエラーが出る。↓はdlmパッケージのZIPを取ってきて解凍してそれをインストールしようとしたとき(tools::Rcmd()はR 3.3.0から加わった関数)

tools::Rcmd("INSTALL . --install-tests --debug")
#> processing '.'
#> a directory
#> * installing to library 'C:/Users/user1/Documents/R/win-library/3.3'
#> * build_help_types=
#> * DBG: 'R CMD INSTALL' now doing do_install()
#> * created lock directory 'C:/Users/user1/Documents/R/win-library/3.3/00LOCK-dlm'
#> * installing *binary* package 'dlm' ...
#> cp: unknown option -- )
#> Try '/usr/bin/cp --help' for more information.
#> Warning: running command 'cp -R . "C:/Users/user1/Documents/R/win-library/3.3/dlm" || ( tar cd - .| (cd "C:/Users/user1/Documents/R/win-library/3.3/dlm" && tar -xf -))' had status 1
#> ERROR: installing binary package failed
#> * removing 'C:/Users/user1/Documents/R/win-library/3.3/dlm'
#> * restoring previous 'C:/Users/user1/Documents/R/win-library/3.3/dlm'
#> Warning message:
#> running command '"C:/PROGRA~1/R/R-33~1.0/bin/x64/Rcmd.exe" INSTALL . --install-tests --debug' had status 1 

同じエラーを報告している人がちらほらいる。

https://groups.google.com/forum/#!topic/rdevtools/qxA5d9-9gPE

ソースを読む

do_install()とあったので適当にr-sourceのレポジトリを検索すると、install.Rというファイルに行きつく。ここで、cpを使ってるのはこの関数らしい。

    ## Unix only
    do_install_binary <- function(pkg, instdir, desc)
    {

(https://github.com/wch/r-source/blob/4f6493d96182944815e329bfa3a7dbeb2023b821/src/library/tools/R/install.R#L373)

Unix only…?

ソースをもうちょい読む

通常のinstall.packages()でバイナリをインストールするとき、Windowsはここを通るはず。

        if (WINDOWS && grepl("\\.zip$", pkg)) {
            pkg_name <- basename(pkg)
            pkg_name <- sub("\\.zip$", "", pkg_name)
            pkg_name <- sub("_[0-9.-]+$", "", pkg_name)
            utils:::unpackPkgZip(pkg, pkg_name, lib, libs_only)
            return()
        }

https://github.com/wch/r-source/blob/4f6493d96182944815e329bfa3a7dbeb2023b821/src/library/tools/R/install.R#L1502-L1509

ここが、install_github()だとZIPファイルを解凍しちゃうのでgrepl("\\.zip$", pkg)FALSEになって処理がスキップされる。

なんでこうなるのかは不明。みんな困ってないんでしょうか...