【发布时间】:2019-01-14 23:36:12
【问题描述】:
关于获取子 CharacterVector 的 Rcpp 问题。我制作了一个可在多个 NumericVectors 上工作的滚动窗口样式函数,但在包含 CharacterVectors 时无法工作。每次尝试使用 CharacterVector 时都会出现此错误:“获取临时对象类型代理的地址”。
这是导致问题的代码行:
CharacterVector subchrom (&chrom[i], &chrom[i+4]);
我是 C++ 新手,因此目前解决方案超出了我的范围。根据我的阅读,问题在于将指针“&”用于两种不同类型的向量,但我不明白如何解决这个问题。有人介意帮我解决这个错误吗?
我阅读了更多内容,现在我有第二个问题。 Rcpp 中的“CharacterVectors”是否被编程为代理?这是我遇到此问题的唯一矢量类型。最好的解决方法是什么?
这是一个完整的例子:
#example data for R
start <- c(0, 2, 4, 6, 8, 10)
chrom <- c("chr1", "chr1", "chr1", "chr1", "chr1", "chr1")
df <- data.frame(start, chrom)
这是 .cpp Rcpp 程序:
#include <algorithm>
#include <Rcpp.h>
#include <vector>
using namespace Rcpp;
// [[Rcpp::export]]
List modifyDataFrame2(DataFrame df) {
// access the columns
CharacterVector chrom = df["chrom"];
IntegerVector start = df["start"];
List Out = List::create();
// write the for loop
for(int i=0; i < df.nrow(); ++i){
NumericVector substart (&start[i], &start[i+4]);
CharacterVector subchrom (&chrom[i], &chrom[i+4]);
Rcout << "substart is:" <<substart << "\n";
Rcout << "subchrom is:" <<subchrom << "\n";
List temp = List::create(subchrom, substart);
Out.push_back(temp);
}
return Out;
}
我目前在处理窗口函数时遇到了问题,因此它除了打印子向量之外什么都不做。在计算复杂化之前,我想从 c++ 中获取输入和输出。
感谢您的帮助。非常感谢您的宝贵时间。
【问题讨论】:
-
看这张表:teuder.github.io/rcpp4everyone_en/… 看起来 CharacterVector 是 StringVector 的代理......嗯嗯。
-
然后呢?该评论与问题有什么关系?答案来了……
-
@DirkEddelbuettel 我很好奇这是否是错误的原因。也许我需要选择不同的方法?感谢您的帮助。
标签: rcpp