Как я могу вернуть массив struct
из .Call
в функцию в общей библиотеке C и впоследствии использовать этот массив в R?Как вернуть массив структур из .Call в C совместно используемую библиотеку в R
Например:
typedef struct{
int thing1;
int thing2;
float thing3;
float thing4;
char thing5;
//... many more things of various simple types
} MY_STRUCT;
SEXP R_Calls_Me(SEXP args) {
// Do stuff with args...
// Create arrayOfMyStructs as what type??
return arrayOfMyStructs;
}
Какой тип arrayOfMyStructs
таким образом, что R может использовать его?
Это похоже на обычную вещь, которую хотелось бы сделать, но я не могу найти примеров этого в документации для написания расширений R.
В конечном счете, я хочу, чтобы возможность вернуть произвольное число этих структур, используя один вызов функции C. В вашем примере показано, как вернуть одну структуру. Могу ли я просто создать вектор векторов для этого? – cachance7
Вы могли бы, если это удобно. В качестве альтернативы, если они одинаковы, вы можете использовать массивы (= векторы) - подумайте о кадре данных, где столбцы - это записи структуры, а строки - разные структуры. Вы бы заменили 'SET_VECTOR_ELT (res, 0, ScalarInteger (a.thing1))' что-то вроде 'SEXP t1 = allocVector (INTSXP, n); SET_VECTOR_ELT (res, 0, t1); int * t1i = INTEGER (t1); for (int i = 0; i
Я думаю, что ваш второй подход имеет наибольшее значение для того, как я намерен использовать возвращаемые данные в R. Спасибо. – cachance7