John -
Thanks for the suggestions. I tried taking not only Rcpp but R out of the
loop, and just compiling from the command line with MinGW. That crashed as
well, so I think there's probably a compatibility issue with MATLAB's API
and MinGW. I'll contact Mathworks tech support to try and get some help
with that.
Regarding v7.3...my files aren't all v7.3, but I could definitely save
them all that way, which might be the easiest solution. I tried what you
suggested with some of my real data files, which contain two variables
each: a matrix and a struct. I get the following warnings:
data <- h5dump("z:/temp/test73.mat", bit64conversion='double')
Warning: h5read for type 'REFERENCE' not yet implemented. Values replaced
by NA's
Warning: h5read for type 'REFERENCE' not yet implemented. Values replaced
by NA's
Warning: h5read for type 'REFERENCE' not yet implemented. Values replaced
by NA's
The data look OK, as far as I can tell. (The matrix is 411x30927, so it's
not like I can check every element, but I don't see anything obviously
wrong.) In addition to the two variables I was expecting, the result has
two additional elements, #refs# and #subsystem. I'm not actually sure how
to see what they contain, since the names include the comment character.
Can I safely ignore those warnings?
Thanks.
- Elliot
On Wed, Mar 25, 2015 at 11:09 AM, John Buonagurio <
jbuonagurio at exponent.com> wrote:
Elliot,
How are you building the executable? Did you make sure to include all
dependencies in the search path (run depends.exe against libmat.dll and
libmx.dll)? Did you make sure to set the appropriate architecture e.g. -m64
in CFLAGS? I don't have access to the MAT-File libraries to test this
myself.
Start simple and take Rcpp out of the equation. Call matOpen from a
simple C function with type void. Does it work with dyn.load() and .C()?
If you are *only* working with v7.3 files which are based on HDF5, you
may be able to avoid this issue and access them using rhdf5:
source("http://bioconductor.org/biocLite.R")
biocLite("rhdf5")
library(rhdf5)
h5dump("file.mat", load=FALSE)
John
From: rcpp-devel-bounces at lists.r-forge.r-project.org [mailto:
rcpp-devel-bounces at lists.r-forge.r-project.org] On Behalf Of Elliot Joel
Bernstein
Sent: Wednesday, March 25, 2015 9:28 AM
To: Dale Smith
Cc: xian at unm.edu; rcpp-devel at lists.r-forge.r-project.org
Subject: Re: [Rcpp-devel] R.e. Using Rcpp and MATLAB MAT-File API to Read
MAT Files
Dale -
Thank you for the suggestion. I have MATLAB and the MATLAB libraries, and
I am not looking to redistribute anything. I just have a lot of data in MAT
files that I would like to be able to load analyze in R. I am able to
compile and link against the MATLAB libraries, but the code crashes when I
run it. I looked into the Octave FAQ. It looks like they don't handle v7.3
files either, and I don't think they provide an API that I could access
from R/C++.
- Elliot
On Wed, Mar 25, 2015 at 8:36 AM, Dale Smith <DSmith at nexidia.com> wrote:
mat.h is a header file which comes with MATLAB. I don't think the license
allows redistribution, and you would not be able to compile without the
MATLAB libraries.
An alternative may be Octave since it will read .mat files. Perhaps
someone can email the name of the header file used from the Octave
distribution?
http://stackoverflow.com/questions/9915658/how-do-you-open-mat-files-in-octave
This also offers a viable way to test this type of code for those who
don't have MATLAB.
Dale Smith, Ph.D. | Data Scientist | nexidia | office: +1 404 495 7220
ext 4008 | fax: +1 404 495 7221 | nexidia.com
-----Original Message-----
From: rcpp-devel-bounces at lists.r-forge.r-project.org [mailto:
rcpp-devel-bounces at lists.r-forge.r-project.org] On Behalf Of Christian
Gunning
Sent: Wednesday, March 25, 2015 8:08 AM
To: rcpp-devel at lists.r-forge.r-project.org
Subject: [Rcpp-devel] R.e. Using Rcpp and MATLAB MAT-File API to Read MAT
Files
Can you provide a link to the mat.h file referenced in the source (which
I assume is the same as the API mentioned below)?
Also, see Dirk's comments about compilers here:
http://stackoverflow.com/questions/10723165/using-visual-c-with-r
and here:
dirk.eddelbuettel.com/code/rcpp/Rcpp-FAQ.pdf
Best,
Christian
I'm trying to use the MATLAB Mat-File API to read data from MAT files
into R. (I've tried using the R.matlab package, but the matrices I'm
loading can be very large, and that method was too slow. In addition,
some of the files I'm loading are v7.3 MAT files, which are not
supported by the package.) I wrote the following simple function to
start testing. It works fine if I compile without the Rcpp parts in
Visual Studio (i.e. I can call matOpen and get a nonzero pointer), but
when I run in R it crashes my R session without displaying "Test".
#include <Rcpp.h>
#include "mat.h"
using namespace Rcpp;
// [[Rcpp::export]]
NumericVector rcpp_mat_load() {
MATFile* mf = matOpen("z:/temp/test.mat", "r");
printf("Test\n");
double val = 10;
NumericVector y = NumericVector::create(val);
return y;
}
--
A man, a plan, a cat, a ham, a yak, a yam, a hat, a canal ? Panama!