gpt4 book ai didi

r - 使用 R 的 C API 更改向量的大小

转载 作者:行者123 更新时间:2023-12-02 04:36:02 25 4
gpt4 key购买 nike

我正在使用 allocVector 分配一个 R 向量在用 .Call 调用的 C 函数中来自 R. 分配后是否可以更改向量的大小/长度?即,类似于 realloc在 C 工作。

在代码中,我正在寻找一个函数 reallocVector以便下面的函数做同样的事情。

SEXP my_function1(SEXP input){
SEXP R_output = PROTECT(allocVector(REALSXP, 100));

// Do some work on R_output

// Keep only the first 50 items
reallocVector(R_output, 50);

UNPROTECT(1);
return R_output;
}

SEXP my_function1(SEXP input){
SEXP tmp_output = PROTECT(allocVector(REALSXP, 100));

// Do the same work on tmp_output

// Keep only the first 50 items
SEXP R_output = PROTECT(allocVector(REALSXP, 50));
for (int i = 0; i < 50; ++i) {
REAL(R_output)[i] = REAL(tmp_output)[i];
}

UNPROTECT(2);
return R_output;
}

最佳答案

看来SETLENGTH Rinternals.h 中定义的宏header 是解决这个问题的最佳选择。 IE。:

SEXP my_function1(SEXP input){
SEXP R_output = PROTECT(allocVector(REALSXP, 100));

// Do some work on R_output

// Keep only the first 50 items
SETLENGTH(R_output, 50);

UNPROTECT(1);
return R_output;
}

关于r - 使用 R 的 C API 更改向量的大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42571200/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com