- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在测试使用 .C 接口(interface)从 R 调用 C 函数。测试包括将一个数字 vector 传递给没有条目的 C 函数,动态分配 n 个位置,进行归因并将 vector 返回给 R。
我正在使用 R.h 的 Calloc。函数原型(prototype)为
type* Calloc(size_t n, type)
如编写 R 扩展中所述。
问题是我没有得到具有 R 中分配位置的新 vector 。该 vector 仍然没有条目。
R中的代码
fooR <- function(x) {
if (!is.numeric(x))
stop("argument x must be numeric")
out <- .C("foo",
x=as.double(x))
return(out$x)
}
x <- numeric()
result <- fooR(x)
C中的函数
#include <R.h>
void foo(double *x)
{
int i, n;
n = 4;
x = Calloc(n, double);
for (i = 0; i < n; i++) {
x[i] = i;
printf("%f\n", x[i]); //just to check
}
}
问题是:.C 接口(interface)可以处理这样的内存分配吗?
最佳答案
是的,您可以那样使用内存管理,但前提是您使用 .Call()
接口(interface)而不是 .C()
接口(interface)。
参见 Memory Allocation 的“编写 R 扩展”手册以及Interface Functions .
还有其他书籍和一些示例。我更喜欢 C++ 而不是 C,并且使用 Rcpp 我们可以隐藏所有机制:
R> cppFunction('IntegerVector makeVec(int n) { return IntegerVector(n); }')
R> makeVec(2)
[1] 0 0
R> makeVec(4)
[1] 0 0 0 0
R>
这在幕后同时使用了 .Call()
和 R 的内存分配,这是一个快速的小证明,“是的,你可以”实际上动态创建了一个 vector 。
关于c - R 将函数 Realoc 与 .C 接口(interface)一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22970759/
我遇到了变量 tempWord 的内存分配问题。我已将问题代码放在我的全部代码下方。它应该读取字典(单词列表)和 wordSearch 网格(二维字符数组),然后遍历所述列表以查找字典中的所有单词。我
老实说,我是 c 的新手。因此,像 malloc 和 realloc 这样的东西是陌生的概念。我想我已经掌握了基础知识,但我还不能 100% 达到目标。 while (int args = scanf
我正在测试使用 .C 接口(interface)从 R 调用 C 函数。测试包括将一个数字 vector 传递给没有条目的 C 函数,动态分配 n 个位置,进行归因并将 vector 返回给 R。 我
我是一名优秀的程序员,十分优秀!