Список процессов от R до C и доступ к нему

Я хотел бы использовать список в C, который я получил от R. Я понимаю, что вопрос очень похож на этот: Передача кадра данных из-в R и C с использованием .call () . Однако я не могу его сохранить в указателе «* target», откуда я буду его использовать.

Р:

.Call("processlist", list(c(1,2), c(1,3,2), c(1,5,4,4))) 

и в C:

 #include  #include  extern "C" { SEXP processlist(SEXP lst); } SEXP processlist(SEXP lst){ SEXP vec = PROTECT(allocVector(VECSXP, 2)); SET_VECTOR_ELT(vec, 0, VECTOR_ELT(c, 0); SET_VECTOR_ELT(vec, 1, VECTOR_ELT(c, 1); SET_VECTOR_ELT(vec, 2, VECTOR_ELT(c, 2); const lngth = 3; int *target[lnght]; // Here i want to fill "target", but how? int *preTarget = INTEGER(vec); // Bad attempts target[0] = INTEGER(preTarget[0]); target[0] = INTEGER(vec[0]); } 

Примечание: C ++, к сожалению, не является опцией.

Изменить: желаемый вывод состоял бы в том, что я могу вызвать * target следующим образом.

 target[0][0] --> Returns: 1 target[1][2] --> Returns: 2 target[2][3] --> Returns: 4 

Вызов «vec» таким образом вызывает у меня ошибку на данный момент.

Мне кажется, что вы просто хотите получить доступ к значениям в списке со стороны C. Если это правильно, посмотрите на код ниже.

В dc :

 /* Including some headers to show the results*/ #include  #include  #include  #include  #include  SEXP processlist(SEXP lst){ int i,l = length(lst); /* You need an array of arrays, so target will be an int** */ int **target = malloc(sizeof(int *)*l); for (i=0;i 

Важно отметить, что target должна быть int** , поскольку это указатель на массив указателей.

В dR (после компиляции dc ):

 dyn.load("d.so") mylist<-list(c(1,2), c(1,3,2), c(1,5,4,4)) #This is very important: by default 1 in R is double. #You need to coerce every element of the list to integer. mylist<-lapply(mylist,as.integer) .Call("processlist", mylist) 

Обратите внимание, что нам нужно принуждать каждый элемент списка к целому. Вышеизложенное дает:

 target[0][0]: 1 target[1][2]: 2 target[2][3]: 4