-
Notifications
You must be signed in to change notification settings - Fork 12
Open
Labels
Description
Hello,
I would use your library to write RData in a C++ software but i can't use it.
I try to write an RData from your example, everything works but when i want to add a second table the produced RData can't be loaded in R. I tried to load with R 3.5 and R 4.0 in the both cases R gave me the error : ReadItem : unknown type 0, perhaps written by later version of R ?
This is the script I use:
int fd = open("/data/test.RData", O_CREAT | O_WRONLY, 0644);
rdata_writer_t *mp_rdataWriter = rdata_writer_init(&write_data, RDATA_WORKSPACE);
int m_rowCount = 3;
rdata_column_t *col1 =
rdata_add_column(mp_rdataWriter, "column1", RDATA_TYPE_REAL);
rdata_column_t *col2 =
rdata_add_column(mp_rdataWriter, "column2", RDATA_TYPE_STRING);
rdata_column_t *col3 =
rdata_add_column(mp_rdataWriter, "column3", RDATA_TYPE_REAL);
rdata_column_t *col4 =
rdata_add_column(mp_rdataWriter, "column4", RDATA_TYPE_STRING);
rdata_begin_file(mp_rdataWriter, &fd);
rdata_begin_table(mp_rdataWriter, "my_table");
rdata_begin_column(mp_rdataWriter, col1, m_rowCount);
rdata_append_real_value(mp_rdataWriter, 0.0);
rdata_append_real_value(mp_rdataWriter, 100.0);
rdata_append_real_value(mp_rdataWriter, 200.0);
rdata_end_column(mp_rdataWriter, col1);
rdata_begin_column(mp_rdataWriter, col2, m_rowCount);
rdata_append_string_value(mp_rdataWriter, "hello");
rdata_append_string_value(mp_rdataWriter, "goodbye");
rdata_append_string_value(mp_rdataWriter, "test");
rdata_end_column(mp_rdataWriter, col2);
rdata_end_table(mp_rdataWriter, m_rowCount, "My data set");
rdata_begin_table(mp_rdataWriter, "test2");
rdata_begin_column(mp_rdataWriter, col3, 2);
rdata_append_real_value(mp_rdataWriter, 0.0);
rdata_append_real_value(mp_rdataWriter, 100.0);
rdata_end_column(mp_rdataWriter, col3);
rdata_begin_column(mp_rdataWriter, col4, 2);
rdata_append_string_value(mp_rdataWriter, "bla");
rdata_append_string_value(mp_rdataWriter, "blo");
rdata_end_column(mp_rdataWriter, col4);
rdata_end_table(mp_rdataWriter, 2, "Test table 2");
rdata_end_file(mp_rdataWriter);
close(fd);and
ssize_t
McqrRdata::write_data(const void *bytes, size_t len, void *ctx)
{
int fd = *(int *)ctx;
return write(fd, bytes, len);
}Thank you
Thomas