C++ 我不知道';我不理解Rcpp中的这种行为
我想使用Rcpp访问整数向量中第二个唯一元素的值,但我得到的是一个长度等于整数向量中第二个项的值的零向量。我做错了什么C++ 我不知道';我不理解Rcpp中的这种行为,c++,r,rcpp,C++,R,Rcpp,我想使用Rcpp访问整数向量中第二个唯一元素的值,但我得到的是一个长度等于整数向量中第二个项的值的零向量。我做错了什么 require(Rcpp) cppFunction("NumericVector test(IntegerVector labelling1) { IntegerVector lvls = unique(labelling1); return(lvls[1]); }") test(1:5) #[1] 0 0 Subsetting sugar需要一个Intege
require(Rcpp)
cppFunction("NumericVector test(IntegerVector labelling1) {
IntegerVector lvls = unique(labelling1);
return(lvls[1]);
}")
test(1:5)
#[1] 0 0
Subsetting sugar需要一个
IntegerVector
作为索引()。如果您想模仿R的独特功能
,则需要进行一些额外的更改:
cppFunction("IntegerVector test(IntegerVector labelling1, int i) {
// get sorted unique values
IntegerVector lvls = sort_unique(labelling1);
// get unique values in order of occurence
IntegerVector lvls1 = lvls[match(lvls, labelling1) - 1];
return(lvls1[IntegerVector::create(i - 1)]);}")
test(c(5:1, 1L), 2)
#[1] 4
Subsetting sugar需要一个
IntegerVector
作为索引()。如果您想模仿R的独特功能
,则需要进行一些额外的更改:
cppFunction("IntegerVector test(IntegerVector labelling1, int i) {
// get sorted unique values
IntegerVector lvls = sort_unique(labelling1);
// get unique values in order of occurence
IntegerVector lvls1 = lvls[match(lvls, labelling1) - 1];
return(lvls1[IntegerVector::create(i - 1)]);}")
test(c(5:1, 1L), 2)
#[1] 4
Subsetting sugar需要一个
IntegerVector
作为索引()。如果您想模仿R的独特功能
,则需要进行一些额外的更改:
cppFunction("IntegerVector test(IntegerVector labelling1, int i) {
// get sorted unique values
IntegerVector lvls = sort_unique(labelling1);
// get unique values in order of occurence
IntegerVector lvls1 = lvls[match(lvls, labelling1) - 1];
return(lvls1[IntegerVector::create(i - 1)]);}")
test(c(5:1, 1L), 2)
#[1] 4
Subsetting sugar需要一个
IntegerVector
作为索引()。如果您想模仿R的独特功能
,则需要进行一些额外的更改:
cppFunction("IntegerVector test(IntegerVector labelling1, int i) {
// get sorted unique values
IntegerVector lvls = sort_unique(labelling1);
// get unique values in order of occurence
IntegerVector lvls1 = lvls[match(lvls, labelling1) - 1];
return(lvls1[IntegerVector::create(i - 1)]);}")
test(c(5:1, 1L), 2)
#[1] 4
这里实际上有一个单独的问题:您正试图从
int
构造NumericVector
,Rcpp执行以下操作:
2
数值向量
构造为数值向量(2)
;即长度为2的NumericVector
IntegerVector
,则必须编写:
IntegerVector test(IntegerVector labelling1) {
IntegerVector lvls = unique(labelling1);
return IntegerVector::create(lvls[1]);
}
或者您也可以使用Rcpp属性(为您自动处理从int
到IntegerVector
的转换):
#包括
使用名称空间Rcpp;
//[[Rcpp::导出]]
int测试(IntegerVector标签1){
整合器lvls=唯一(标签1);
返回等级[1];
}
/***R
测试(1:5)
*/
这里实际上有一个单独的问题:您试图从int
构造一个数值向量
,Rcpp执行以下操作:
2
数值向量
构造为数值向量(2)
;即长度为2的NumericVector
IntegerVector
,则必须编写:
IntegerVector test(IntegerVector labelling1) {
IntegerVector lvls = unique(labelling1);
return IntegerVector::create(lvls[1]);
}
或者您也可以使用Rcpp属性(为您自动处理从int
到IntegerVector
的转换):
#包括
使用名称空间Rcpp;
//[[Rcpp::导出]]
int测试(IntegerVector标签1){
整合器lvls=唯一(标签1);
返回等级[1];
}
/***R
测试(1:5)
*/
这里实际上有一个单独的问题:您试图从int
构造一个数值向量
,Rcpp执行以下操作:
2
数值向量
构造为数值向量(2)
;即长度为2的NumericVector
IntegerVector
,则必须编写:
IntegerVector test(IntegerVector labelling1) {
IntegerVector lvls = unique(labelling1);
return IntegerVector::create(lvls[1]);
}
或者您也可以使用Rcpp属性(为您自动处理从int
到IntegerVector
的转换):
#包括
使用名称空间Rcpp;
//[[Rcpp::导出]]
int测试(IntegerVector标签1){
整合器lvls=唯一(标签1);
返回等级[1];
}
/***R
测试(1:5)
*/
这里实际上有一个单独的问题:您试图从int
构造一个数值向量
,Rcpp执行以下操作:
2
数值向量
构造为数值向量(2)
;即长度为2的NumericVector
IntegerVector
,则必须编写:
IntegerVector test(IntegerVector labelling1) {
IntegerVector lvls = unique(labelling1);
return IntegerVector::create(lvls[1]);
}
或者您也可以使用Rcpp属性(为您自动处理从int
到IntegerVector
的转换):
#包括
使用名称空间Rcpp;
//[[Rcpp::导出]]
int测试(IntegerVector标签1){
整合器lvls=唯一(标签1);
返回等级[1];
}
/***R
测试(1:5)
*/
我想我是要求它返回一个数值向量而不是int,所以当它强制int为数值向量时,这是结果。我想我是要求它返回一个数值向量而不是int,所以当它强制int为数值向量时,这是结果。我想我是要求它返回一个数值向量而不是int,所以当它强制int为一个数值向量这是结果。我想我是要求它返回一个数值向量而不是int,所以当它强制int为数值向量时,这就是结果。显然,找到第二个唯一元素的可能性更大。谢谢。(我同意有更有效的方法找到第二个唯一元素,但这是一个复制我问题的最小示例)。显然,有更有效的方法找到第二个唯一元素。谢谢。(我同意有更有效的方法找到第二个唯一元素,但这是一个复制我问题的最小示例)。显然,有更有效的方法找到第二个唯一元素。谢谢。(我同意有更有效的方法找到第二个唯一元素,但这是一个复制我问题的最小示例)。显然,有更有效的方法找到第二个唯一元素。谢谢。(我同意有更有效的方法找到第二个唯一元素,但这是一个复制我问题的最小示例)我对C++和Rcpp很陌生,但在我看来几乎没有人希望从<代码> int >代码>转换为<代码>数字向量< /代码>当用户尝试这样做时,会产生错误或警告是否明智或实用?我对C++和Rcpp很陌生,但在我看来几乎没有人愿意。