C到R:创建一个列表向量

时间:2012-01-13 23:29:57

标签: c r

我正在写一个R包,想要创建一个列表向量: 我做了以下几点:

int dim = 5;
SEXP root;
PROTECT(root=allocVector(VECSXP,dim));
for(int i=0;i<dim;i++)
{
    SEXP(coerceVector(root))[i] = list1(allocVector(REALSXP, 1));
}
// every list will be appended after
//I have not any means to know its length in advanc

不幸的是,这段代码甚至都没有编译。 有什么帮助吗?

1 个答案:

答案 0 :(得分:2)

假设您的意思是 pairlist 而不是 list ,正确的代码看起来更像

int dim = 5;
SEXP root = PROTECT(allocVector(VECSXP, dim));
for (int i = 0; i < dim; i++)
    SET_VECTOR_ELT(root, i, list1(allocVector(REALSXP, 1)));

我不确定这是否符合您的意图,但这相当于:

> root = list(pairlist(NA_real_), pairlist(NA_real_), pairlist(NA_real_), pairlist(NA_real_), pairlist(NA_real_))
> str(root)
List of 5
 $ :Dotted pair list of 1
  ..$ : num NA
 $ :Dotted pair list of 1
  ..$ : num NA
 $ :Dotted pair list of 1
  ..$ : num NA
 $ :Dotted pair list of 1
  ..$ : num NA
 $ :Dotted pair list of 1
  ..$ : num NA