Я работаю в R, используя библиотеки C. Мне нужно передать функции C массив с числами от 1 до 10, но это также может быть «NA». Затем в C, в зависимости от значения, мне нужно установить выход. Вот упрощенный код, проходящий в R-массиве до функции C с «NA»
heredyn.load("ranking.so")
fun <- function(ranking) {
nrak <- length(ranking)
out <- .C("ranking", as.integer(nrak), as.character(ranking), rr = as.integer(vector("integer",nrak)))
out$rr
}
ranking <- sample(c(NA,seq(1,10)),10,replace=TRUE)
rr <- fun(ranking)
Функция C может просто быть таким, как
#include <R.h>
void ranking(int *nrak, char *ranking, int *rr) {
int i ;
for (i=0;i<*nrak;i++) {
if (ranking[i] == 'NA')
rr[i] = 1 ;
else
rr[i] = (int) strtol(&ranking[i],(char **)NULL,10) ;
}
}
Благодаря значению «NA» Я поставил рейтинг как характер, но может быть, есть другой способ сделать это, используя число и не заменяя «NA» на 0 перед вызовом функции?
(код, как это дает мне всегда массив нулей ...)
Не указывайте константу _null указателя_, заданную макросом 'NULL'. Общее правило - не использовать ненужные броски. – Olaf
ok. спасибо! но я не думаю, что это преодолевает проблему. – Stefano
Комментарий не для ответа. – Olaf