Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 获取R数据帧的内存地址_C++_R_C_Rcpp - Fatal编程技术网

C++ 获取R数据帧的内存地址

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"]

我希望我的C函数能够处理R数据帧中存储的一些值

为了实现这一点,需要R数据帧存储其数据的(真实)存储器地址(希望以连续的方式);然后从R调用C函数,并将该内存地址作为参数传递


问题是:如何获得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有成千上万行代码。