Rcpp如何直接在R List中更改值

时间:2015-07-30 10:50:55

标签: c++ r rcpp

我知道如何从List objet中获取值,以及如何在C函数中创建值。

但我想更改List中作为参数给出的值 并且在退出函数时修改将有效。

有些事情:

void myfunc(SEXP *lst) '
   List mylist (lst)
// make some modification

}

我需要在递归循环中修改列表。

提前致谢 丹尼尔

1 个答案:

答案 0 :(得分:4)

没有魔力。只需从List对象中分配元素,然后修改:

R> Rcpp::cppFunction("List foo(List L) { List L2 = L[0]; L2[1] = 42; return L2;} ")
R> L <- list(list(0,1,2), 2:4, 3.3)
R> foo(L)
[[1]]
[1] 0

[[2]]
[1] 42

[[3]]
[1] 2

R> 

我们选择第一个元素(并且知道它本身是List;有测试的谓词)。在该列表中,我们设置了第二个元素。您可以返回原始但现在已修改的列表:

R> Rcpp::cppFunction("List bar(List L) { List L2 = L[0]; L2[1] = 42; return L;} ")
R> L <- list(list(0,1,2), 2:4, 3.3)
R> bar(L)
[[1]]
[[1]][[1]]
[1] 0

[[1]][[2]]
[1] 42

[[1]][[3]]
[1] 2


[[2]]
[1] 2 3 4

[[3]]
[1] 3.3

R>