2017-04-25 92 views
2

我最近將R更新到最新版本:3.4.0。 R安裝在網絡位置H:/在R 3.4.0中從二進制文件安裝軟件包

filename <- paste0("R:/path/independeR_", versions, ".zip") 
    install.packages(filename, 
        repos = NULL, type = "source", 
        lib = gsub("\\\\\\\\networkpath/home/[[:alpha:]]*/", 
           "H:/", .libPaths()[1])) 

兩個H:/R:/是網絡位置:現在,當我嘗試安裝一個本地二進制包奇怪的事情正在發生。在.libPaths()中,默認位置位於H:/位置,但會顯示整個網絡地址。在撥打install.packages我替換了這個。

上面的代碼將失敗,並輸出如下:

'\\networkpath\home\JDUB~PN6\DOCU~UZL\R\R-34~TN4.0' is not recognized as an internal or external command, 
operable program or batch file. 
Warning in install.packages : 
    running command '"//networkpath/home/JDUB~PN6/DOCU~UZL/R/R-34~TN4.0/bin/x64/R" CMD INSTALL -l "H:\Documents\R\R-3.4.0\library" "R:/path/independeR_0.1.8.zip"' had status 1 
Warning in install.packages : 
    installation of package ‘R:/path/independeR_0.1.8.zip’ had non-zero exit status 

還有就是我在這裏感到驚訝兩兩件事。目錄名都混亂了(DOCU~UZL而不是Documents等),但由於某些原因命令promt似乎很好。更有趣的事情是這樣的:

當我嘗試把命令"//networkpath/home/JDUB~PN6/DOCU~UZL/R/R-34~TN4.0/bin/x64/R" CMD INSTALL -l "H:\Documents\R\R-3.4.0\library" "R:/path/independeR_0.1.8.zip"直接進入命令提示符,輸出十分相似:

C:\Users\jdubbeldam>"//networkpath/home/JDUB~PN6/DOCU~UZL/R/R-34~TN4.0/b 
in/x64/R" CMD INSTALL -l "H:\Documents\R\R-3.4.0\library" "R:/path/independeR_0.1.8.zip" 

'\\networkpath\home\JDUB~PN6\DOCU~UZL\R\R-34~TN4.0' is not recognized as 
an internal or external command, 
operable program or batch file. 

出於某種原因,CMD似乎切斷路徑中途通過。我想這是因爲命令太長了。當我嘗試相同的命令時,但使用H:/Documents/R/R-3.4.0/bin/x64/R時,安裝很順利。

我希望能夠從腳本自動安裝此軟件包,所以我想從R內解決此問題。有沒有辦法讓R使用較短的H:/Documents/R/R-3.4.0/bin/x64/R

回答

0

我在和更新包的問題,​​同時搜索,我發現存在影響越來越時間戳從文件在Windows 10中報告的bug: https://bugs.r-project.org/bugzilla3/show_bug.cgi?id=17261

中的R 3.4.0開始, file.info 有時返回mtime, atime和ctime用於目錄。這似乎有什麼事要做 與分享。這會影響使用file.mtime的函數,如 update.packages。

重現:

嘗試file.info()用隨機目錄。如果它返回合法的 文件時間,請打開一個Windows資源管理器窗口並導航到 目錄,然後再次運行該呼叫並返回s。

在某些情況下,即使目錄未打開(或在打開的資源管理器窗口的路徑中爲 ),也會返回s,但這不一致。

隨着托馬斯Kalibera的評論:

感謝您的報告,這是一個已知的bug已經在R-devel的已修復 最近

我發現,當我關閉了文件瀏覽器窗口,時間戳工作正常,並沒有顯示爲NA。
這可能是您的代碼無法工作的原因。

+0

雖然此鏈接可能會回答問題,但最好在此處包含答案的重要部分並提供供參考的鏈接。如果鏈接頁面更改,則僅鏈接答案可能會失效。 –

+0

嗯,我記得在調試'install.packages'時看到錯誤信息中提到的'mtime'和'ctime'這兩個名字,但不知道如何處理它們。 雖然這並沒有直接回答如何解決這個問題,但它確實確認它是一個錯誤,並且它應該儘快修復。 – JAD

0

我設法做了以下工作。不過,我認爲這是非常醜陋的,並且仍然想看看是否有可能另外做到這一點。

filename <- paste0("R:/path/independeR_", versions, ".zip") 

cmd <- file.path(gsub("//networkpath/home/[[:alnum:]]*/", "H:/", 
         gsub("//networkpath/home/[[:alnum:]]*~[[:alnum:]]*/", 
         "H:/", R.home())), "bin/x64/R") 

libname <- gsub("\\\\\\\\networkpath/home/[[:alpha:]]*/", 
       "H:/", .libPaths()[1]) 

call <- paste(paste0('"', cmd, '"'), 
       "CMD", 
       "INSTALL", 
       "-l", 
       paste0('"', libname, '"'), 
       "--no-lock", 
       paste0('"', filename, '"'), 
       sep = " ") 

system(call)