2013-09-23 150 views
0

我有以下片斷工程確定,但如果數據集「測試」並不在HDF5文件,該文件是存在產生不必要的錯誤,事實上,有效的情況下:如何在嘗試打開HDF5文件之前測試數據集是否存在於HDF5文件中?

library(rhdf5) 
test_data <- h5read('test.h5', 'Test') 
if (exists('test_data')) { 
    # then read the data 
    df_test <- as.data.frame(t(test_data)) 
    # work with df_test 
} 

和R輸出錯誤如果數據集不存在:

Error in h5read('test.h5', 'Test') : 
    Object Test does not exist in this HDF5 file. 
Execution halted 

我想優雅地處理這個沒有R過程吐出零星的錯誤。

+1

也許使用'trycatch'?我懷疑你的一部分混亂是'h5read'是函數它正在尋找'Test',所以如果它失敗了,那麼'test_data'甚至會被創建。 –

+0

事實上,使用trycatch優雅地解決了我的OP問題。你能否提供一個基於trycatch的高質量答案,我會接受?第一行替換爲:tryCatch(test_data < - h5read('test.h5','Test'),error = function(e){print(''Test'datat not found「)})'其餘的代碼保持不變,因爲'exists'函數將完成它的工作。 –

回答

3

OK,我想,根據您的意見,這是你想要的行:

讓我們假設你已經輸入的文件名作爲參數,所以:

nextfile<- 'test.h5' 

tryCatch(test_data <- h5read(nextfile, 'Test'), error = function(e) { print(paste("'Test' dataset not found in ",nextfile)) }) 

然後你會知道哪些文件失敗。 (大概你有一個類似的機制設置來存儲每個文件在不同的「test_data」或列表變量的一個元素test_data[[j]]