首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我不明白Rcpp的这种行为

我不明白Rcpp的这种行为
EN

Stack Overflow用户
提问于 2014-10-21 02:04:40
回答 2查看 239关注 0票数 0

我希望使用Rcpp访问整数向量中的第二个唯一元素的值,但得到长度等于整数向量中第二个项的值的零向量。我做错了什么?

代码语言:javascript
复制
require(Rcpp)
cppFunction("NumericVector test(IntegerVector labelling1) {
  IntegerVector lvls = unique(labelling1);
  return(lvls[1]);
}")

  test(1:5)
 #[1] 0 0
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-10-21 19:49:06

实际上,这里有一个单独的问题:您试图从一个NumericVector构建一个int,并且Rcpp执行以下操作:

  1. 函数将返回整数值2
  2. NumericVector被构造为NumericVector(2);即长度为2的NumericVector

如果您真正想要的是表示该索引上的值的IntegerVector,则必须编写:

代码语言:javascript
复制
IntegerVector test(IntegerVector labelling1) {
  IntegerVector lvls = unique(labelling1);
  return IntegerVector::create(lvls[1]);
}

或者您也可以使用Rcpp属性(它为您自动处理从intIntegerVector的转换):

代码语言:javascript
复制
#include <Rcpp.h>
using namespace Rcpp;

// [[Rcpp::export]]
int test(IntegerVector labelling1) {
  IntegerVector lvls = unique(labelling1);
  return lvls[1];
}

/*** R
test(1:5)
*/
票数 2
EN

Stack Overflow用户

发布于 2014-10-21 07:57:38

Subset砂糖需要一个IntegerVector作为索引(http://gallery.rcpp.org/articles/subsetting/)。如果您想模仿R的unique函数,您需要进行一些额外的更改:

代码语言:javascript
复制
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
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26477803

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档