Набор данных r hdf5 написан неправильно?

Когда я выполняю следующее, мой набор данных «предикторов» заполняется правильно:

library(rhdf5)
library(forecast)
library(sltl)
library(tseries)

fid <- H5Fcreate(output_file)
## TODO: compute the order p
p <- 4
# write predictors
h5createDataset(output_file, dataset="predictors", c(p, length(tsstl.remainder) - (p - 1)), storage.mode='double')
predictors <- as.matrix(tsstl.remainder)
for (i in 1:(p - 1)) {    
    predictors <- as.matrix(cbind(predictors, Lag(as.matrix(tsstl.remainder), i)))
}
predictors <- as.matrix(predictors[-1:-(p-1),])
head(predictors)
h5write(predictors, output_file, name="predictors")
H5Fclose(fid)

Сгенерированный (правильный) вывод для head(predictors):

            [,1]        [,2]        [,3]       [,4]
[1,]   0.3089645   6.7722063   5.1895389  5.2323261
[2,]   8.7607228   0.3089645   6.7722063  5.1895389
[3,]  -0.9411553   8.7607228   0.3089645  6.7722063
[4,] -14.1390243  -0.9411553   8.7607228  0.3089645
[5,] -26.6605296 -14.1390243  -0.9411553  8.7607228
[6,]  -8.1293076 -26.6605296 -14.1390243 -0.9411553

Однако когда я его прочитал, результаты оказались неверными:

tsmatrix <- t(as.matrix(h5read(output_file, "predictors")))
head(tsmatrix)

Неправильно выводит:

            [,1]      [,2]       [,3]      [,4]
[1,]   0.3089645  8.760723 -0.9411553 -14.13902
[2,] -26.6605296 -8.129308 -9.8687675  31.52086
[3,]  54.2703126 43.902489 31.8164836  43.87957
[4,]  22.1260636 36.733055 54.7064107  56.35158
[5,]  36.3919851 25.193068 48.2244464  57.12196
[6,]  48.0585673 72.402673 68.3265518  80.18960

Почему то, что я пишу, не соответствует тому, что я получаю обратно? Я перепроверил, и программа просмотра HDF5 hdfview также показывает неправильные значения для набора данных «предикторы».

Что здесь не так?


person SkyWalker    schedule 21.08.2013    source источник
comment
Пожалуйста, укажите все пакеты, которые вы используете   -  person Dason    schedule 21.08.2013
comment
Попробовать без t?   -  person blmoore    schedule 21.08.2013
comment
предоставленные библиотеки, с t - это точно такой же результат, который я получаю в hdfview, что очень странно.   -  person SkyWalker    schedule 21.08.2013
comment
ты хотел транспонировать? t для транспонирования   -  person user2510479    schedule 21.08.2013
comment
Я понимаю, t предназначен для транспонирования, я хотел увидеть результат таким, каким я его вижу в hdfview, способ сделать это - выполнить транспонирование t(...) Я знаю, что это звучит безумно, но проблема именно в этом: я что-то пишу и получаю что-то полностью разные записанные в файл.   -  person SkyWalker    schedule 21.08.2013
comment
Из документов rhdf5: Please note, that arrays appear as transposed matrices when opening it with a C-program (h5dump or HDFView). This is due to the fact the fastest changing dimension on C is the last one, but on R it is the first one (as in Fortran).   -  person blmoore    schedule 21.08.2013
comment
@blmoore, ты прав, проблема именно в этом. Если я запишу свои данные транспонированными, то hdfview покажет правильные результаты. Пожалуйста, опубликуйте это как ответ, и я приму его.   -  person SkyWalker    schedule 21.08.2013


Ответы (1)


Из rhdf5 docs:

Обратите внимание, что массивы отображаются как транспонированные матрицы при открытии их с помощью программы на языке C (h5dump или HDFView). Это связано с тем, что наиболее быстро изменяющееся измерение на C - последнее, а на R - первое (как в Фортране).

person blmoore    schedule 21.08.2013