Skip to content

Unable to write two tables in a RData file #38

@RudolphDev

Description

@RudolphDev

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions