Удаление элемента из списка в Rcpp

Предположим, у меня есть следующий список:

x <- list(a = c(1, 2), b = c("a", "c"), c = 1:10)

В R я могу удалить первый элемент, используя следующие два метода:

x[-1]
x[1] <- NULL

Я пытаюсь сделать то же самое в Rcpp, но я не могу понять это. Следующий код просто присваивает NULL к первому элементу.

// [[Rcpp::export]]
Rcpp::List removeElement(Rcpp::List x)
{
  x[0] = R_NilValue;
  return(x);
}

Есть идеи?

1 ответ

Решение

Как насчет

// [[Rcpp::export]]
Rcpp::List removeElement(Rcpp::List x, int j)
{
  IntegerVector idx = seq_len(x.length());
  return(x[idx != j]);
}

Или, если вы хотите, чтобы индексы начинались с 0, используйте

IntegerVector idx = seq_len(x.length()) - 1;
Другие вопросы по тегам