我正在写一个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
不幸的是,这段代码甚至都没有编译。 有什么帮助吗?
答案 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