R语言——哈希表

前言:

在 R 语言中有个包——hash 包提供了我们需要的哈希结构,本文主要介绍该 hash 包的使用。

(使用之前先 install.packages(“hash”) 进行安装)

其实,数据框也可以实现哈希表的功能,但是效率不高,操作也不方便。

另外,曾经出现过 rdict 包,使用起来就像 Python 里面的字典一样好用,详情请见:rdict: A hash table for R using skip lists。但是好像后来被 CRAN 取消了,也有可能是把它合并到其它包里面去了,知道的朋友有劳告知一下。

正文:

哈希表的创建和元素的添加:

## 方法一:直接创建一个hash对象
> h = hash()

## 方法二:在创建的时候添加元素
> h = hash(keys = c(‘a‘,‘b‘), values = c(2,3))
> h
<hash> containing 2 key-value pair(s).
  a : 2
  b : 3

## 方法三:键值对可用等号赋值
> h = hash(‘a‘=2, ‘b‘=3)
> h
<hash> containing 2 key-value pair(s).
  a : 2
  b : 3

## 方法四:创建hash对象以后再添加元素
> h = hash()
> h$‘c‘ = 4
> h
<hash> containing 1 key-value pair(s).
  c : 4

## 方法五:最常用的添加元素的方法
> h = hash()
> .set(h, keys = ‘d‘, values = 5)
> h
<hash> containing 1 key-value pair(s).
  d : 5

注释:方法四不能用于循环输入,因为 ‘$’ 的后缀不能是变量。而方法五不仅可以一次添加多对键值,而且允许 keys 是变量。

哈希表的清空和元素的删除:

## 方法一:清空哈希表
> h = hash(c(‘a‘,‘b‘), c(2,3))
> clear(h)
> h
<hash> containing 0 key-value pair(s).
  NA : NULL

## 方法二:删除键值对
> h = hash(c(‘a‘,‘b‘), c(2,3))
> del(‘a‘, h)   ## 等价于 delete(‘a‘, h)
> h
<hash> containing 1 key-value pair(s).
  b : 3

哈希表的查找:

## 方法一:利用index(索引)
> h = hash(‘a‘ = c(2,3,4), ‘b‘ = 5)
> h
<hash> containing 2 key-value pair(s).
  a : 2 3 4
  b : 5
> h[‘a‘]
<hash> containing 1 key-value pair(s).
  a : 2 3 4
> h[[‘a‘]]
[1] 2 3 4
> h[[‘a‘]][2]
[1] 3

## 方法二:转成列表
> h = hash(‘a‘ = c(2,3,4), ‘b‘ = 5)
> as.list(h)
$a
[1] 2 3 4

$b
[1] 5

> as.list(h)$a[2]
[1] 3

## 方法三:利用 ‘$‘
> h = hash(‘a‘ = c(2,3,4), ‘b‘ = 5)
> h$‘a‘
[1] 2 3 4
> h$‘a‘[2]
[1] 3

## 方法四:利用 values() 查找值
> h = hash(‘a‘ = c(2,3,4), ‘b‘ = 5)
> values(h)
$a
[1] 2 3 4

$b
[1] 5

> values(h)$‘a‘[2]
[1] 3
> values(h, ‘a‘)[2]
[1] 3

## 方法五:查找键
> h = hash(‘a‘ = c(2,3,4), ‘b‘ = 5)
> has.key(‘a‘, h)
   a
TRUE
> keys(h)
[1] "a" "b"

哈希表的其它方法:

> h = hash(‘a‘ = 2, ‘b‘ = 3)
> is.hash(h)   ## 是否是 hash 对象
[1] TRUE
> is.empty(h)   ## 是否为空
[1] FALSE
> length(h)   ## 哈希表的长度
[1] 2
> h2 = copy(h)   ## 哈希表的拷贝
> h2
<hash> containing 2 key-value pair(s).
  a : 2
  b : 3

关于 R 语言 hash 包的更多内容请见:Package ‘hash’

转载请注明出处,谢谢!(原文目录:http://blog.csdn.net/Bone_ACE/article/details/47821589

时间: 2024-10-07 03:41:06

R语言——哈希表的相关文章

R 语言笔记 频数表和列联表

我们将着眼于类别型变量的频数表和列联表,以及相应的独立性检验.相关性的 度量.图形化展示结果的方法还将连带使用vcd包和gmodels包中的函数. 数据来自vcd包中的Arthritis数据集 library(vcd) 一维列联表 可以使用table()函数生成简单的频数统计表 > mytables<-with(Arthritis,table(Improved)) > mytables Improved None   Some Marked 42     14     28 可以用pro

在 SPSS Statistics 和 Modeler 中调用 R 语言的实现和应用

http://www.ibm.com/developerworks/cn/data/library/ba/ba-1401spss-r/index.html 登录 | 注册   IBM 技术主题 软件下载 社区 技术讲座 搜索 developerWorks 打印本页面 用电子邮件发送本页面 新浪微博 人人网 腾讯微博 搜狐微博 网易微博 Digg Facebook Twitter Delicious Linked In developerWorks 中国 技术主题 Information Mana

R语言实现︱局部敏感哈希算法(LSH)解决文本机械相似性的问题(二,textreuse介绍)

上一篇(R语言实现︱局部敏感哈希算法(LSH)解决文本机械相似性的问题(一,基本原理))讲解了LSH的基本原理,笔者在想这么牛气冲天的方法在R语言中能不能实现得了呢? 于是在网上搜索了一下,真的发现了一个叫textreuse的包可以实现这样的功能,而且该包较为完整,可以很好地满足要求. 现在的版本是 0.1.3,最近的更新的时间为 2016-03-28. 国内貌似比较少的用这个包来实现这个功能,毕竟R语言在运行大规模数据的性能比较差,而LSH又是处理大规模数据的办法,所以可能国内比较少的用R来执

简单的哈希表实现 C语言

简单的哈希表实现 简单的哈希表实现 原理 哈希表和节点数据结构的定义 初始化和释放哈希表 哈希散列算法 辅助函数strDup 哈希表的插入和修改 哈希表中查找 哈希表元素的移除 哈希表打印 测试一下 这是一个简单的哈希表的实现,用c语言做的. 原理 先说一下原理. 先是有一个bucket数组,也就是所谓的桶. 哈希表的特点就是数据与其在表中的位置存在相关性,也就是有关系的,通过数据应该可以计算出其位置. 这个哈希表是用于存储一些键值对(key -- value)关系的数据,其key也就是其在表中

C语言-简单哈希表(hash table)

腾讯三面的时候,叫我写了个哈希表,当时紧张没写好···结果跪了··· 回来后粪发涂墙,赶紧写了一个! 什么都不说了···先让我到厕所里面哭一会··· %>_<% 果然现场发挥,以及基础扎实才是important的! 用链地址法解决冲突的哈希表(C语言,VS2008编写.测试): 1 #include <stdio.h> 2 #include <stdlib.h> 3 #include <math.h> 4 #include <string.h>

C语言实现的哈希表

C语言实现的哈希表哈希表可以简单理解为多个链表的集合,将每个新的成员根据其哈希值进行分类,这样可以加快链表的查找速度参考:https://www.cnblogs.com/s-b-b/p/6208565.html #include <stdio.h> #include <stdlib.h> #include <string.h> #define HASHSIZE 10 typedef unsigned int uint; /*定义一个链表的节点*/ typedef str

R语言读取Hive数据表

R通过RJDBC包连接Hive 目前Hive集群主要在济阳,我们的权限是可以通过跳板机来访问 HiveServer, 将Hive 中的批量数据读入R环境,并进行后续的模型和算法运算. 1. 登录跳板机后需要首先在Linux下进行配置 从root权限切换到bzsys用户,才能够通过验证读取Hive.首先需要配置Hadoop的临时环境变量CLASSPATH路径 su bzsys export CLASSPATH=$CLASSPATH:/etc/hadoop/conf 2. 下载并安装RJDBC包 L

c语言构建哈希表

/*哈希查找 *哈希函数的构造方法常用的有5种.分别是: *数字分析法 *平方取中法 *分段叠加 *伪随机数 *除留取余法 *这里面除留取余法比较常用 *避免哈希冲突常用的方法有4种: *开放定址法(线性探测再散列.二次探测再散列) *链地址法 *再哈希法 *建立公共溢出区 其中,线性探测再散列比较常用*/ 这是一道2009年武汉科技大学的考研题,但是按照要求却做不出来,因为对7取模最多只有7个空间,不可能放进8个数,所以怀疑这道题是不是出错了,但这是考研题,应该不会出错吧.所以各位大神,你们怎

手把手教你用C语言编写一个哈希表

原文链接:https://www.swack.cn/wiki/001558681974020669b912b0c994e7090649ac4846e80b2000/001572849111298ae30696043604e45a4c83f0e9842b818000 简介: 本文摘自 jamesroutley/write-a-hash-table 文章 GitHub 地址:https://github.com/jamesroutley/write-a-hash-table 源码 GitHub 原作