2016-11-24 55 views
3

有兩個一般表達式...(只是舉例)...檢測R的表達是否需要圖形裝置

e1 <- expression({sin(x)})  # does not need gr. device 
e2 <- expression({curve(sin(x))}) # needs gr. device 

這將是檢測到e2需要GR的最佳途徑。設備提前eval(e2)

類似於detectNeedsGr(e2),返回TRUEdetectNeedsGr(e1),返回FALSE並且它應該能夠以非交互模式工作。

到目前爲止,我可以想像解析all.names(e2) ......,非常不方便。

更多細節

  1. 每一個表達式將在工作流
  2. 什麼表達式需要GR的nowledge進行評估。輸出需要之前的工作流程調整工作流程的細節,而不是之後eval(很明顯,eval誰都知道後)
  3. 表達式是不是任意的,他們來自衆所周知的定義
  4. 有可能加入到定義特定表達式是否會產生gr的邏輯選項。輸出,但它是過度的,我想避免這一點,並以編程方式找出。
  5. 我可以設計的eval邏輯後使用工作流程,但它帶來的步驟,我想避免,並基於該我指明問題。
  6. 不是設備能力等問題
  7. 在這種情況下,工作流程將被納入閃亮的應用程序中,但通常它並不重要。
+1

最佳做法是不評估任意表達式。 – Roland

+0

@Rolland ...不是選項 –

+0

我希望我的問題現在已經清楚。 –

回答

1

這可能是最簡單的辦法,以確保您始終有一個可用的圖形設備:

grcap <- any(capabilities()[c("X11", "aqua")]) 
win <- .Platform$OS.type == "Windows" 
inter <- interactive() 
if(!(grcap || (win && inter))) 
{ 
    filename <- paste0(tempfile(), "%03d.jpg") 
    jpeg(filename) 
} 

如果你的腳本被運行在一個會話與圖形處理能力這個檢查。如果不是,則任何圖將發送到臨時目錄中的jpg文件,並在關閉時刪除。

+0

嗯,我很抱歉,沒有問題的能力()... –

+0

你剛剛downvote我沒有使用你沒有在你的問題中提供的信息? –

+0

是的,就是我,在所有方面都尊重你的努力,這是錯誤的目標問題,通常在這個問題上沒有用。我很抱歉,這裏有一些規則,我相信我只是在警惕之內。 –

相關問題