我知道如何从List objet中获取值,以及如何在C函数中创建值。
但我想更改List中作为参数给出的值 并且在退出函数时修改将有效。
有些事情:
void myfunc(SEXP *lst) '
List mylist (lst)
// make some modification
}
我需要在递归循环中修改列表。
提前致谢 丹尼尔
答案 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>