2012-01-28 25 views
2

我有一個調用多個窗口(新的圖形設備窗口)的函數。爲了做到這一點,我使用Windows()。這可行,但因爲這是一個軟件包,我如何使它成爲平臺中立的,因此每個繪圖都在新窗口中繪製,同時離開舊窗口?平臺中性呼叫新圖

我目前有:

WORD.C <- function(WORDS){ 
require(wordcloud) 

L2 <- lapply(WORDS, function(x) as.data.frame(table(x), stringsAsFactors = FALSE)) 

    FUN <- function(X){ 
     windows() #how to make this platform neutral 
     wordcloud(X[, 1], X[, 2], min.freq=1) 
    } 
    lapply(L2, FUN) 
} 

WORD.C(list.xy) 
+3

''window''和'x11'是通用的,因爲這些映射是正確的,並且可以處理任何操作系統的風格。如果你關心的話,這對Sweave並不會有好處。 – 2012-01-28 21:06:49

+0

@Dr G你可以發表一個答案,以便我可以接受嗎? – 2012-01-28 21:08:43

+3

你應該添加一個'if(dev.interactive())dev.new()',以便該函數在非交互式設備(如pdf)上仍然產生一些有用的東西?我喜歡'grid'圖形如何讓你從設備上的繪圖中解開繪圖創建,爲每個調用'dev.new()'的繪圖定義一個'print()'方法是微不足道的。或'grid.newpage()'。 – baptiste 2012-01-28 22:10:16

回答

7

dev.new()涵蓋您的需求?它會打開控制檯會話中設置的默認類型的圖形窗口。

+0

這似乎是最簡單的解決方案。謝謝。 X11像意志一樣工作,但是會像開發人員那樣警告。新似乎沒有。 – 2012-01-28 21:57:55

4

Mac電腦一般會打開一個X11窗口,所以這可能是一個最小的解決方案:

if(.Platform$OS.type =="unix") { X11() } else { windows() } 

如果你想在分支GUI類型,然後你可以使用:

if(.Platform$GUI %in% ("X11", "Tk")) { X11() } else { 
     if (.Platform$GUI == "AQUA"){ quartz()} else { 
      windows()       }  } 
# For more details 
?.Platform 
?Devices 
+2

AFAIK X11()/ x11()無處不在,你不需要檢查平臺。 – 2012-01-28 21:42:44

+0

@DWin你的方法和X11一樣[有警告],但我認爲dev.new()更通用。謝謝。 – 2012-01-28 21:56:55

+0

@DWin感謝您分享.Platform $ GUI。我不知道那件事。相當漂亮 – 2012-01-28 23:42:55