C++ 获取R数据帧的内存地址
我希望我的C函数能够处理R数据帧中存储的一些值 为了实现这一点,需要R数据帧存储其数据的(真实)存储器地址(希望以连续的方式);然后从R调用C函数,并将该内存地址作为参数传递C++ 获取R数据帧的内存地址,c++,r,c,rcpp,C++,R,C,Rcpp,我希望我的C函数能够处理R数据帧中存储的一些值 为了实现这一点,需要R数据帧存储其数据的(真实)存储器地址(希望以连续的方式);然后从R调用C函数,并将该内存地址作为参数传递 问题是:如何获得R数据帧的内存地址?Rcpp通过引用传递。也就是说,它将指针传递给R对象,而不是它们的值。因此,你可以用C++的方法和其他指针一样操作它们。 范例 library(Rcpp) cppFunction(' void f1(DataFrame x) { IntegerVector V1 = x["V1"]
问题是:如何获得R数据帧的内存地址?Rcpp通过引用传递。也就是说,它将指针传递给R对象,而不是它们的值。因此,你可以用C++的方法和其他指针一样操作它们。 范例
library(Rcpp)
cppFunction('
void f1(DataFrame x) {
IntegerVector V1 = x["V1"];
V1 = V1 * 2;
}
')
x = data.frame(V1 = 1:5, V2 = 1:5)
f1(x)
x
# V1 V2
# 1 2 1
# 2 4 2
# 3 6 3
# 4 8 4
# 5 10 5
Rcpp通过引用传递。也就是说,它将指针传递给R对象,而不是它们的值。因此,你可以用C++的方法和其他指针一样操作它们。 范例
library(Rcpp)
cppFunction('
void f1(DataFrame x) {
IntegerVector V1 = x["V1"];
V1 = V1 * 2;
}
')
x = data.frame(V1 = 1:5, V2 = 1:5)
f1(x)
x
# V1 V2
# 1 2 1
# 2 4 2
# 3 6 3
# 4 8 4
# 5 10 5
lobstr包应该具有您想要的内容。试试lobstr::obj_addr()函数!你提议的方法似乎不明智。你研究过“编写R扩展”的方法吗?data.frame是一个带有class属性“data.frame”和一些其他属性的列表。在R中使用
dput(您的数据帧)
查看数据结构。对不起,我自己不会说C。最多,我可以在C++中涉猎一点,只使用RCPP。我不知道你为什么需要它,但是你可以在那里学习dput
的源代码:一个简单的例子:-一个使用R包和编译代码的简单介绍:。lobstr包应该有你想要的。试试lobstr::obj_addr()函数!你提议的方法似乎不明智。你研究过“编写R扩展”的方法吗?data.frame是一个带有class属性“data.frame”和一些其他属性的列表。在R中使用dput(您的数据帧)
查看数据结构。对不起,我自己不会说C。最多,我可以在C++中涉猎一点,只使用RCPP。我不知道你为什么需要它,但是你可以在那里学习dput
的源代码:一个简单的例子:-一个使用R包和编译代码的简单介绍:。这似乎就是我需要的!您是否介意发布函数cppFunction
的C/C++代码,使数据帧列的乘法/重写成为可能?示例中给出了C/C++代码(即,它作为文本字符串传递给cppFunction
)<代码> CPPPytys/CODE >只是定义C++函数与C++代码的一种速记方式。你也可以用普通的方式在一个单独的文件中写C++函数,然后用<代码> SooCeCPP</代码>编译/链接到R。基本上,RCpp
package已经为您完成了使用指针集成R和C的艰苦工作-无需重新发明轮子。请看一个简短的介绍和更详细的版本,请参阅阅读至少几页的小插图。@ DrkdDelbEtter感谢指针。你介意发送一个指向RCPP代码的一部分的链接吗?这就是为什么我已经建议至少阅读前面提到的小插曲。您可以考虑其他许多下一步:包有<代码>数据。框架< /代码>示例,并且有几个帖子。简而言之:没有一个简洁的代码块可以做到这一点。这就是为什么Rcpp有成千上万行代码的原因。这似乎是我需要的!您是否介意发布函数cppFunction
的C/C++代码,使数据帧列的乘法/重写成为可能?示例中给出了C/C++代码(即,它作为文本字符串传递给cppFunction
)<代码> CPPPytys/CODE >只是定义C++函数与C++代码的一种速记方式。你也可以用普通的方式在一个单独的文件中写C++函数,然后用<代码> SooCeCPP</代码>编译/链接到R。基本上,RCpp
package已经为您完成了使用指针集成R和C的艰苦工作-无需重新发明轮子。请看一个简短的介绍和更详细的版本,请参阅阅读至少几页的小插图。@ DrkdDelbEtter感谢指针。你介意发送一个指向RCPP代码的一部分的链接吗?这就是为什么我已经建议至少阅读前面提到的小插曲。您可以考虑其他许多下一步:包有<代码>数据。框架< /代码>示例,并且有几个帖子。简而言之:没有一个简洁的代码块可以做到这一点。这就是为什么Rcpp有成千上万行代码。