2013-09-23 116 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]]