2013-08-30 2 views
2

Я задал вопрос here, и это привело меня к другому вопросу.Как выделить строку с помощью c api R?

В R нет принципиального различия между строкой и символом . «Строка» - это просто символьная переменная, содержащая один или более символов.

и

Существует различие между скалярной переменной символьного и вектор. Вектор символа представляет собой набор строк, сохраненных как один объект .

Так что мне интересно, как выделить строку с помощью c api R? Например, то, что я получаю от:

result = Rf_allocVector(STRSXP, dst_size); 

является его (result) а scalar character variable или vector? или я могу использовать другой API для выделения строки?

Спасибо.

+2

Если вы ищете другой API 'библиотека Rcpp' обеспечивает хорошую оболочку для кода C++, обрабатывая все это распределение для вас интуитивным способом. –

+0

См. Раздел 5.9 «Написание расширений R». –

ответ

3

У нас есть, что в качестве мотивирующего примера в нашей вводной виньетки в Rcpp пакете (и это также публикуется как paper JSS in 2011):

В C API вы должны сделать выделить вектор STRSXP:

SEXP ab; 
PROTECT(ab = allocVector(STRSXP, 2)); 
SET_STRING_ELT(ab, 0, mkChar("foo")); 
SET_STRING_ELT(ab, 1, mkChar("bar")); 
UNPROTECT(1); 

, который накладывает на программиста знание PROTECT, UNPROTECT, SEXP, allocVector, SET_STRING_ELT и mkChar.

В то время как с Rcpp и используя Rcpp::CharacterVector класс, мы можем выразить тот же код более сжато:

Rcpp::CharacterVector ab(2); 
ab[0] = "foo"; 
ab[1] = "bar"; 
+0

Спасибо. Да, я использую API C и совершенно не понимаю всех этих понятий. Ваш ответ подсказывает мне. – lulyon

Смежные вопросы