我寫了一個shebang R腳本,並希望從Perl腳本執行它。我目前使用system ($my_r_script_path, $r_script_arg1, $r_script_arg2, ...)
,我的問題是如何驗證R腳本正常終止(沒有錯誤或警告)。如何驗證從Perl執行的R腳本的正常終止?
猜測我應該讓我的R腳本在最後返回一些真正的值,只要一切正常,然後在Perl中捕獲這個值,但我不知道該怎麼做。
謝謝!
我寫了一個shebang R腳本,並希望從Perl腳本執行它。我目前使用system ($my_r_script_path, $r_script_arg1, $r_script_arg2, ...)
,我的問題是如何驗證R腳本正常終止(沒有錯誤或警告)。如何驗證從Perl執行的R腳本的正常終止?
猜測我應該讓我的R腳本在最後返回一些真正的值,只要一切正常,然後在Perl中捕獲這個值,但我不知道該怎麼做。
謝謝!
您可以在命令quit()
中設置返回值,例如q(status=1)
。默認值是0,另請參閱?退出。如何用Perl捕捉那個,就像在Perl中捕獲任何其他返回值。如果我沒有記錯,它被保存在一個特殊的變量$?
中。請參閱perldoc中的示例system
,應該在那裏說明。
在旁註中,我只是使用R-Perl接口。你可以找到信息和例子在這裏: http://www.omegahat.org/RSPerl/
只是爲了完整性:
在腳本的開始,你可以把這樣的:
options(
warn=2, # This will change all warnings into errors,
# so warnings will also be handled like errors
error= quote({
sink(file="error.txt"); # save the error message in a file
dump.frames();
print(attr(last.dump,"error.message"));
sink();
q("no",status=1,FALSE) # standard way for R to end after errors
})
)
這將節省的錯誤信息,退出R會話而不保存,退出代碼1並且不運行.Last。
儘管如此,R-Perl界面還是提供了很多值得檢查的可能性,如果你打算更經常這樣做的話。
如果一切正常(包括沒有警告),我該如何告訴腳本的末尾?我是否必須爲每個可能失敗的命令設置一些try塊?還是有一些全球性的方式來立即終止任何錯誤/警告並返回一些值? – 2010-09-08 08:39:17
使用該錯誤選項。正如我前面所說明的那樣,您可以指定發生錯誤時所需的任何功能。您也可以通過使用選項(警告= 2)使任何警告成爲錯誤。另見http://stackoverflow.com/questions/3650444/r-script-line-numbers-at-error/3660847#3660847 – 2010-09-08 09:27:50
感謝您的「完整性」(+1) – 2010-09-08 14:43:18
http://stackoverflow.com/questions/3477916/using-perls-system#3478060 – daxim 2010-09-08 07:30:45
@daxim:這只是答案的一半。另一半是如何在R腳本中設置退出狀態。所以這不僅僅是一個Perl問題,因此不是另一個問題的重複,所以我也反對關閉這個問題的動議。 – 2010-09-08 07:37:23
@Aristotle:我相信當David談到在R腳本中返回一個真正的價值時,他正在提出一個解決方案。這不是要求的一部分。 – Zaid 2010-09-08 08:03:18