Я думаю, что я ответил на мою проблему вместо того, чтобы обернуть
struct MyData {
SEXP exp;
int i;
}
Я создаю вектор:
SEXP ext = PROTECT(allocVector(VECSXP, 2));nprotect++;
SET_VECTOR_ELT(ext, 0, exp);
SET_VECTOR_ELT(ext, 1, sexpI);
и ext
это мой объект и Я позволил менеджеру мусора R управлять им. Но структура не является непрозрачной, и пользователь может изменить ее.