2011-10-11 78 views
4

我希望把我的.Rprofile如下:動態調整列大小在.Rprofile

# auto width adjustment 
.adjustWidth <- function(...){ 
    options(width=Sys.getenv("COLUMNS")) 
    TRUE 
} 
.adjustWidthCallBack <- addTaskCallback(.adjustWidth) 

這將動態調整在我的R對話的最大列是窗口的寬度。這適用於交互式會話,但做一些如R CMD,當安裝或批處理會議上,我總是得到:

Error in options(width = Sys.getenv("COLUMNS")) : 
    invalid 'width' parameter, allowed 10...10000 
Execution halted 

我怎樣才能解決這個問題?我認爲問題是Sys.getenv(「COLUMNS」)以某種方式失敗?是否有一些if()語句可以讓我檢測是否批量運行?原始的自動寬度調整代碼不是我的,我發現它在其他地方在線。

+0

還有'互動()',測試是否R爲與交互或不使用;例如'if(interactive()).adjustWidth < - function(...)'等。 – user109114

回答

7

也許包裹選項在try功能幫助:

try(options(width=Sys.getenv("COLUMNS")), silent = TRUE) 
+0

當然!很簡單。很棒。 –

0

對我來說COLUMNS沒有得到時,我的X終端窗口(VTE基礎,在Linux上)更新,而R的運行被調整,因爲它在每個命令之後由bash更新。 (根據this question的接受答案)

我發現了一個暗示,以更好的解決方案this page。它談到solaris的resize命令,但也提到了stty,這是linux的。

所以閱讀手冊頁(和一些基礎研發問題)之後,我想出了這個:

# auto width adjustment 
if(interactive()) { 
    .adjustWidth <- function(...){ 
     options('width' = sapply(strsplit(system("stty size", intern = T), " "), "[[", 2)) 
     TRUE 
    } 
    .adjustWidthCallBack <- addTaskCallback(.adjustWidth) 
}