2012-06-02 102 views
7

我正在使用R工作室。有沒有辦法知道R腳本是直接運行還是在另一個腳本中運行?

有沒有辦法知道R腳本是直接由控制檯中的source命令運行還是在另一個腳本中運行?即。另一個腳本來源,這就是第一個腳本的調用。

在某些情況下,這可能對提示某些值有用。

我現在正在做的是將變量設置爲true或false,並在腳本中檢查該變量。這有效,但自動方式更好。

謝謝你的時間。

編輯>>>更多信息

比方說,我有一個運行良好作爲是一個獨立的劇本,但這個劇本是一個過程完成後,另一個腳本運行的一部分。如果我必須同時運行,我可以運行第一個,然後運行第二個;但我也有機會跑第二。

我在問的是如果有一種方法(在第二個腳本中)來驗證第二個是從第一個還是第二個被調用。

看看他簡單的例子(由格雷格·斯諾的回答啓發)

scripta.R:

writeLines("script A") 
if (interactive()) writeLines("interactive: true") else writeLines("interactive false") 
source("scriptb.r") 

scriptb.R:

writeLines("script B") 
if (interactive()) writeLines("interactive: true") else writeLines("interactive false") 
writeLines("end B") 

結果在Rstudio是

script A 
interactive: true 
script B 
interactive: true 
end B 
after B 

我喜歡有類似的東西

script A 
interactive: true 
script B 
interactive: false 
end B 
after B 

我希望現在更清楚。

感謝

+1

請問您爲什麼使用此設置可以讓您更清楚一點?這聽起來有點神祕... –

回答

1

如果我理解正確的話,簡單的message()命令應該做你需要的東西(我認爲)。既然你調用基於邏輯檢查幾個劇本之一,則具有像每個腳本的開頭呼應的消息:

message("R has now entered script_1.R \n")

應該這樣做。如果腳本從未被調用,因爲某些變量設置爲FALSE,那麼您將永遠不會看到此消息。

如果需要從控制檯提示,且讀取值,然後插入一行:

new_input <- readline("Enter a value for x: ")

也將是你有幫助。

5

不是你的問題的直接答案,但相關的一個是看看interactive函數。如果R認爲您處於交互式會話並且假定有人可以回答問題是合理的,則該功能將返回TRUE,如果在BATCH模式下運行,並且相當確定沒有人員(或外星人,智能動物等)回答問題。

不完全是你問的,但它可能有助於決定是否提示信息。

+0

感謝您的回答。顯然R工作室將此設置爲TRUE,我無法獲得其他任何內容。這是我正在尋找的。以防萬一,我只是在我的問題中添加更多信息。 – notuo

+0

@notuo,如果你完全控制了這兩個腳本,那麼最好的方法可能是在腳本A中創建一個變量或設置一個選項,然後在腳本B中檢查變量的選項或存在,然後在腳本A中更改選項或變量退出前。 –

相關問題