R语言which函数详解以及Rcpp的改写

  • 引言
  • which 函数的介绍
  • which函数的一些小例子
    • 1
    • 2
  • which函数的改进以及时间对比

引言

首先来介绍一下R语言which函数的作用:which函数在向量、矩阵、数据框,列表、因子这些数据结构中有这重要的作用,可以查找特定的元素返回其在数据中的索引,因此非常方便操作数据。

which 函数的介绍

which函数中的参数:

function (x, arr.ind = FALSE, useNames = TRUE)

which函数的源码:

which <- function(x, arr.ind = FALSE, useNames = TRUE)
{
wh <- .Internal(which(x))
if (arr.ind && !is.null(d <- dim(x)))
arrayInd(wh, d, dimnames(x), useNames=useNames) else wh
}
arrayInd <- function(ind, .dim, .dimnames = NULL, useNames = FALSE) {
##-- return a matrix length(ind) x rank == length(ind) x length(.dim)
m <- length(ind)
rank <- length(.dim)
wh1 <- ind - 1L
ind <- 1L + wh1 %% .dim[1L]
dnms <- if(useNames) {
list(.dimnames[[1L]][ind],
if(any(nzchar(nd <- names(.dimnames)))) nd else
if(rank == 2L) c(“row”, “col”) # for matrices
else paste0(“dim”, seq_len(rank)))
}
ind <- matrix(ind, nrow = m, ncol = rank, dimnames = dnms)
if(rank >= 2L) {
denom <- 1L
for (i in 2L:rank) {
denom <- denom * .dim[i-1L]
nextd1 <- wh1 %/% denom # (next dim of elements) - 1
ind[,i] <- 1L + nextd1 %% .dim[i]
}
}
storage.mode(ind) <- “integer”
ind
}

供给想改进的同学学习!

which函数的一些小例子

1

x <- sample(1:10,25,T)

x的值: 10 9 3 10 9 9 10 10 3 10 7 9 9 7 2 4 2 8 8 5 4 7 3 8 4

which(x == 10)

10在向量x中的位置:1 4 7 8 10

给向量x命名,测试一下useNames = TRUE是否起作用!

names(x) <- letters[1:25]
which(x == 10,useNames = FALSE)
which(x == 10,useNames = TRUE)


然而并没有什么卵用!

2

a <- matrix(rep(1:3,times = c(3,3,3)),3,3)
which(a == 1,arr.ind = T)
which(a == 1,arr.ind = F)
which(a == 1,arr.ind = T,useNames = TRUE)
which(a == 1,arr.ind = F,useNames = FALSE)

结果:

which函数的改进以及时间对比

针对向量版本的我这里就不展示了!
根据矩阵中的某个元素返回其在矩阵中的位置!
Rcpp代码

sourceCpp(code = '#include <RcppArmadillo.h>//[[Rcpp::depends("RcppArmadillo")]]//[[Rcpp::export]]arma::mat whicha(arma::mat matrix,int what){arma::uvec out;//查找索引值out = find(matrix == what);//查找索引值(从0开始)int n = matrix.n_rows; //行数int nl = out.n_elem; //查找元素总数arma::vec foo;arma::mat out1(nl,2);  //输出矩阵foo = arma::conv_to<arma::vec>::from(out); //查找值所在的向量索引out1.col(1) = floor(foo / n)+1;for(int i = 0;i < nl;i++){out1(i,0) = floor(out(i) % n)+1;}return out1;  }   ')

时间对比:

library(microbenchmark)microbenchmark(which(z == 1,arr.ind = T),whicha(z,1) )

R语言which函数详解以及Rcpp改写相关推荐

  1. r 语言c函数,R语言常用函数详解

    R语言对于我们生信人员来讲,再熟悉不过,然而任何一门语言想要学好,必须经过常年的日积月累才可以做到,在这里,我列举R中常用的函数的用法, 供大家学习. 1.序列函数seq 用法: seq(form,t ...

  2. r语言如何读取matlab数据类型,R语言数据类型深入详解

    R语言用来存储数据的对象包括: 向量, 因子, 数组, 矩阵, 数据框, 时间序列(ts)以及列表 意义介绍 1. 向量(一维数据): 只能存放同一类型的数据 语法: c(data1, data2, ...

  3. R语言基础知识详解及概括

    R语言基础知识详解及概括 目录 R语言基础知识详解及概括 R数据可视化示例 R语言进行数据创建

  4. R语言生存分析详解:KM曲线、COX比例风险模型、HR值解读、模型比较、残差分析、是否比例风险验证:基于survival包lung数据集

    R语言生存分析详解:KM曲线.COX比例风险模型.HR值解读.模型比较.残差分析.是否比例风险验证:基于survival包lung数据集 目录

  5. c语言memset对应java,C语言memset函数详解

    C语言memset函数详解 memset() 的作用:在一段内存块中填充某个给定的值,通常用于数组初始化与数组清零. 它是直接操作内存空间,mem即"内存"(memory)的意思. ...

  6. 【C语言】函数详解(入门到进阶)

    目录 前言 一.什么是函数 二.函数的构成 三.函数的调用和声明 四.函数的参数 五.函数的递归 总结 写在后面 前言 最近帮家里的小朋友整理一些学习C语言的知识点 有整体入门基础文章--[C语言]拯 ...

  7. [C语言] scanf 函数详解多组输入法和gitee 自荐

    自荐 gitee>>> C语言学习练习: C语言学习练习 上面是我的gitee C语言仓库链接,欢迎大家来看看我写的代码.!(◦˘ ³(♡ŐωŐ♡)(给大家推荐gitee(码云)这个 ...

  8. C语言strlen函数详解

    strlen函数详解 一.strlen函数简介 1.函数原型 2.注意事项 二.strlen函数模拟实现 1.计数器方式 2.递归实现 3.指针-指针实现 一.strlen函数简介 1.函数原型 si ...

  9. 【多元统计分析与R语言】【详解】使用教材P84页表3-2进行多元数据简单R分析:定量变量的分析(直方图、散点图)、定性变量的分析并绘制绘制均值条图、箱尾图、星相图、调和曲线图

    可视化[教材P84页表3-2] 1.题目 2.题目详解 2.1.多元数据简单R分析:定量变量的分析(直方图.散点图).定性变量的分析(单因素分析.多维列联表).参考教材P45-P52页. 2.2.绘制 ...

最新文章

  1. [国家集训队]航班安排
  2. hadoop程序运行
  3. CodeBlocks 汉化教程及多语言
  4. 解决eclipse中java代码注释变成乱码的问题
  5. 动态加载laydate 失效_Java对象的内存布局+反射的原理+动态代理+ 并发和锁+文末彩蛋...
  6. 模仿百度搜索框,进行联想搜索
  7. deprecated_@Deprecated新外观可能是什么?
  8. java 栈空间_初学JAVA——栈空间堆空间的理解
  9. Python案例:按键测试
  10. 月薪一万在石家庄能过什么样的生活?
  11. 系统学习NLP(十九)--文本分类之FastText
  12. learning scala 变量
  13. 关于鼓励软件产业和集成电路产业发展有关税收政策问题的通知
  14. 形式语言与自动机 图灵机
  15. java+动态修改prooper_Spring Aop 权限开发(Java后台管理权限) (完整版)
  16. 华为云服务器如何使用
  17. Thinkcmf - 微信公众号开发 -1
  18. android ui 切图工具,APP切图标注教程:UI设计切图标注的小工具实用技巧
  19. 随机数 == 伪随机数?
  20. 北大计算机专硕学费,北京大学专业硕士学费被曝高达2.2万元/年

热门文章

  1. [转]域名解析图解教程
  2. 17.探索薅(hao)羊毛
  3. [译] Realm 的使用入门
  4. BIRT 调用 SPL 脚本
  5. 解析jsonarra_解析Json——操纵JsonArray
  6. java hash table
  7. 2021年12月03日问题汇总
  8. 防火墙之数据包过滤iptables
  9. 计算机基础知识试题及答案(二),计算机基础知识试题以及答案(二)
  10. CV2 Sobel算子实现方法研究