相当于 Rcpp 中的 'which' 函数

2024-05-07

我是 C++ 和 Rcpp 的新手。假设我有一个向量

t1<-c(1,2,NA,NA,3,4,1,NA,5)

我想获得 t1 的元素索引NA。我可以写:

NumericVector retIdxNA(NumericVector x) {

    // Step 1: get the positions of NA in the vector
    LogicalVector y=is_na(x);

    // Step 2: count the number of NA
    int Cnt=0;
    for (int i=0;i<x.size();i++) {
       if (y[i]) {
         Cnt++;
       }
    }

    // Step 3: create an output matrix whose size is same as that of NA
    // and return the answer
    NumericVector retIdx(Cnt);
    int Cnt1=0;
    for (int i=0;i<x.size();i++) {
       if (y[i]) {
          retIdx[Cnt1]=i+1;
          Cnt1++;
       }
    }
    return retIdx;
}

然后我得到

retIdxNA(t1)
[1] 3 4 8

我想知道:

(i) 是否有任何等价物which在 Rcpp 中?

(ii) 有什么方法可以使上述函数更短/更清晰吗?特别是,有没有简单的方法可以结合上面的步骤1、2、3?


最新版本犰狳 http://dirk.eddelbuettel.com/code/rcpp.armadillo.html具有识别有限值和非有限值索引的函数。

所以这段代码

#include <RcppArmadillo.h>
// [[Rcpp::depends(RcppArmadillo)]]

// [[Rcpp::export]]
arma::uvec whichNA(arma::vec x) {
  return arma::find_nonfinite(x);
}

/*** R
t1 <- c(1,2,NA,NA,3,4,1,NA,5)
whichNA(t1)
*/

产生您想要的答案(在 C/C++ 中对离一进行模块,因为它们是从零开始的):

R> sourceCpp("/tmp/uday.cpp")

R> t1 <- c(1,2,NA,NA,3,4,1,NA,5)

R> whichNA(t1)
     [,1]
[1,]    2
[2,]    3
[3,]    7
R> 

如果您首先创建要子集化的序列,Rcpp 也可以做到这一点:

// [[Rcpp::export]]
Rcpp::IntegerVector which2(Rcpp::NumericVector x) {
  Rcpp::IntegerVector v = Rcpp::seq(0, x.size()-1);
  return v[Rcpp::is_na(x)];
}

添加到上面的代码会产生:

R> which2(t1)
[1] 2 3 7
R> 

逻辑子集在 Rcpp 中也有些新内容。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

相当于 Rcpp 中的 'which' 函数 的相关文章

随机推荐

  • pandas:如何将嵌套 JSON 解包为数据帧?

    我有这样的 JSON 输出 json json SeriousDlqin2yrs prediction 0 prediction probs 0 0 95 1 0 04 SeriousDlqin2yrs prediction 0 predi
  • Chaincode已实例化但未出现在实例化代码列表中

    我正在运行 Hyperledger Fabric 1 4 0 我有 1 个组织 Org1 2 个同伴 peer0 peer1 和两个订购者 ord0 ord1 同行们使用couchdb作为存储后端 我能够成功install我的链码 然后in
  • HTML 电子邮件:表格还是 div?

    html 电子邮件通讯的 HTML CSS 是否需要采用表格格式 或者我可以使用 DIV 来保证它能够在跨电子邮件客户端上良好地显示吗 我下载了许多模板来看看它们是如何完成的 并以此为基础构建我自己的模板 它们似乎都使用表格 非常感谢任何见
  • Java 中的冒号是什么意思?

    Java 中的冒号是什么意思 我有这个 public static List
  • gem 如何提供 Cucumber 功能和步骤定义?

    我有两个 Rails 项目 A 和 B 其中包含以下宝石 project A gem green theme path gt dev themes green theme gem devel tasks path gt dev themes
  • MSIE 和 addEventListener Javascript 中出现问题?

    document getElementById container addEventListener copy beforecopy false 在Chrome Safari中 上面将在复制页面内容时运行 beforecopy 函数 MSI
  • C# Null 传播运算符/条件访问表达式和 if 块

    The 空传播运算符 条件访问表达式 https roslyn codeplex com discussions 540883进来c 6 0 questions tagged c 23 6 0看起来是一个非常方便的功能 但我很好奇它是否有助
  • 在 Ruby 中创建 Microsoft Word (.docx) 文档

    有没有一种简单的方法可以在 Ruby 应用程序中创建 Word 文档 docx 实际上 就我而言 它是一个由 Linux 服务器提供服务的 Rails 应用程序 类似的宝石Prawn http prawn majesticseacreatu
  • 读取Android文件系统中的所有文件

    我正在编写一个Android mediaPlayer应用程序 所以我想扫描整个手机上的所有文件 即sd卡和手机内存 我可以从 SD 卡读取数据 但不能读取它的根目录 也就是说 我可以从路径中读取 sdcard folder 它工作得很好 但
  • ASP.NET 5 OAuth 不记名令牌身份验证

    我正在尝试在 ASP NET 5 中实现 OAuth 不记名令牌身份验证 并且很难找到如何执行此操作的示例 因为 OWIN 内容在 ASP NET 5 中已发生变化 例如IApplicationBuilder UseOAuthAuthori
  • 在组织内部分发我的 python 模块

    我用 python 制作了一些模块 我想将它们分发到我的组织内 这些模块已经存储在BitBucket中 例如 有什么方法可以使用 pip install 来分发它们吗 正确的方法是什么 您可以从 GitHub 进行 pip 安装 并且应该能
  • 在Lua中获取前一天的日期

    谁能告诉我如何使用 Lua 获取 YYYY MM DD 格式的前一天日期 即 一个片段 它将返回运行当天的前一天的日期 Try print os date Y m d os time 24 60 60 严格来说 这只能保证在 POSIX 系
  • R 从 .CSV 创建 NetCDF

    我正在尝试从 csv 文件创建 NetCDF 我在这里和其他地方读过一些教程 但仍然有一些疑问 我有一个这样的表 lat long time rh temp 41 109 6 1 1 40 107 18 2 2 39 105 6 3 3 4
  • 相当于 DB2 的 LIMIT

    你好吗LIMIT在 iSeries 版 DB2 中 我有一个包含超过 50 000 条记录的表 我想返回 0 到 10 000 条记录 以及 10 000 到 20 000 条记录 我知道你用 SQL 写的LIMIT 0 10000在 0
  • 如何在动态创建的一组 editText 上设置 onFocusChangeListener()?

    我有这段代码 每次前一个 lineaLayout 的 edittext 失去焦点时 我都会膨胀一个包含 3 个 editText 的 LinearLayout 我只想在最近创建的 editTexts 上使用 onFocusChangeLis
  • java中如何查找两个时间戳的差异?

    我有一个ArrayList包括多个时间戳 目的是找到第一个和最后一个元素的差异ArrayList String a ArrayList get 0 String b ArrayList get ArrayList size 1 long d
  • 具有最小长度的 TypeScript 数组

    如何在 TypeScript 中创建只接受具有两个或更多元素的数组的类型 needsTwoOrMore onlyOne should have error needsTwoOrMore one two should be allowed n
  • 使用 IntelliJ 的 Cucumber 找不到步骤定义

    我遇到了以下问题 我在 IntelliJ 中有四个 Cucumber 功能文件 我通过 IntelliJ 插件添加了 Cucumber 支持 创建功能后 我按如下方式编辑了配置 以便可以执行功能文件 Glue should be the n
  • 如何将 tkinter 窗口放在其他窗口之上?

    我正在使用 Python 2Tkinter and PyObjC 然后我用py2app 该程序工作正常 但每当我打开该程序时 该窗口都会以隐藏状态开始 因此直到我单击扩展坞上的图标将其调出时 它才会出现 有什么方法可以控制这个 使窗口位于应
  • 相当于 Rcpp 中的 'which' 函数

    我是 C 和 Rcpp 的新手 假设我有一个向量 t1 lt c 1 2 NA NA 3 4 1 NA 5 我想获得 t1 的元素索引NA 我可以写 NumericVector retIdxNA NumericVector x Step 1