相关疑难解决方法(0)

如何从两个向量中创建R中的列表(一个是键,另一个是值)?

我有两个向量,我想在R中创建一个列表,其中一个向量是键,另一个是值.我以为我会在我的书中轻松找到答案或googleing并且我期待找到一个解决方案,比如在向量中添加名称(名称(v)< - names_vector),但我失败了.

我有两种可能的解决方案,但对我来说似乎都不优雅.R不是我的主要编程语言,但我认为R是如此实用,应该存在更好的解决方案(类似于list(keys = x,values = y)).

我的解决方案1:经典循环解决方案:

    > xx <- 1:3
    > yy <- letters1:3
    > zz =list()
    >for(i in 1:length(yy)) {zz[[yy[i]]]<-xx[i]}
Run Code Online (Sandbox Code Playgroud)

我的解决方案2:通过命名向量的间接路径:

    > names(xx) <- letters[1:3]
    > as.list(xx)
Run Code Online (Sandbox Code Playgroud)

似乎我有一个解决方案,但我的矢量有100万或更多的元素,我不仅担心编码风格(对我很重要)而且还担心效率(但我不知道如何在R中进行分析).有没有更合适的方法呢?使用指定的矢量快捷方式是一个好习惯吗?

[[更新]]我的applogies,可能我过于简化了问题,使其可重现.我想给列表的元素命名.我首先尝试了names(),但似乎我做错了什么并且没有用.所以我错误地认为names()不适用于列表.但他们确实如接受的答案所示

r

24
推荐指数
3
解决办法
2万
查看次数

如何通过遍历列来创建字典/哈希表?

我有一个两列的数据框:键和值,我想使用每列的相应行为字典/哈希表的每个元素创建一个字典.

据我所知,使用R字典/散列表的典型方法是做类似的事情.

labels.dic <- c("Id of the item and some other description" = "id")
Run Code Online (Sandbox Code Playgroud)

这很好用,但是当我尝试使用数据框中的值(在示例中命名为lbls)时,它不起作用.为什么会这样?

labels.dic <- c(lbls[1,1]=lbls[1,2])
Error: unexpected '=' in "c(lbls[1,1] ="
Run Code Online (Sandbox Code Playgroud)

dictionary r hashtable

11
推荐指数
1
解决办法
3万
查看次数

从列表到data.table与hash的R快速单项查找

我经常遇到的一个问题是需要从data.table中查找任意行.昨天我遇到了一个问题,我试图加速循环并使用profvis我发现从中查找data.table是循环中最昂贵的部分.然后我决定尝试找到在R中进行单项查找的最快方法.

数据通常采用data.table带有字符类型的键列的a形式.其余列通常是数值.我试图创建一个随机表,其特征与我经常处理的相似,这意味着> 100K行.我比较了本机列表,data.table包和hash包.本机列表与data.table单个项目查找性能相当.Hash似乎快了两个数量级.测试由随机抽样的10组10,000个密钥组成,以提供访问行为的变化.每种查找方法都使用相同的密钥集.

最终我的首选是要让data.table的行查找更快,而不是必须创建我的数据的哈希表,或者确定它不能完成,只需在我必须快速查找时使用哈希包.我不知道是否可能,但是你可以创建一个对data.table中行的引用的哈希表,以允许使用哈希包快速查找吗?我知道在C++中可以使用这种类型的东西,但据我所知,由于缺少指针,R不允许这种事情.

总结一下:1)我是否正确地使用data.table进行查找,因此这是单行查找所需的速度?2)是否可以创建指向data.table行的指针散列,以便以这种方式快速查找?

测试系统:

Windows 10 Pro x64

R 3.2.2

data.table 1.9.6

哈希2.2.6

Intel Core i7-5600U,16 GB RAM

码:

library(microbenchmarkCore) # install.packages("microbenchmarkCore", repos="http://olafmersmann.github.io/drat")
library(data.table)
library(hash)

# Set seed to 42 to ensure repeatability
set.seed(42)

# Setting up test ------

# Generate product ids
product_ids <- as.vector(
  outer(LETTERS[seq(1, 26, 1)],
    outer(outer(LETTERS[seq(1, 26, 1)], LETTERS[seq(1, 26, 1)], paste, sep=""),
          LETTERS[seq(1, 26, 1)], paste, sep = "" …
Run Code Online (Sandbox Code Playgroud)

hash r data.table

10
推荐指数
2
解决办法
2518
查看次数

R中有没有类似字典的结构

我有一个字符串向量,如

sv = c('xx_S1_xx', 'xx_S1_xx', 'xx_S2_xx', 'xx_S3_xx', ...)
Run Code Online (Sandbox Code Playgroud)

但是我很难找到一个类似字典的结构,所以我可以将它转换为

map = { S1=>c('xx_S1_xx', 'xx_S1_xx'), S2=>c('xx_S2_xx'), S3=>c('xx_S3_xx'), ... }
Run Code Online (Sandbox Code Playgroud)

有什么建议?

r

3
推荐指数
1
解决办法
109
查看次数

如何将整数映射到整数?

我需要将整数映射到 R 中的整数。在 python 中,这是字典的工作

>>> a = { 4: 1, 5: 2, 6:3 }
>>> a[5]
2
Run Code Online (Sandbox Code Playgroud)

但在 R 中不存在这样的东西。向量不起作用:

 a<- c(1,2,3)
> a
[1] 1 2 3
> names(a) <- c(5,6,7)
> a
5 6 7 
1 2 3 
> a[[5]]
Error in a[[5]] : subscript out of bounds

Run Code Online (Sandbox Code Playgroud)

列表也不起作用

> a<- list(1,2,3)
> a
[[1]]
[1] 1

[[2]]
[1] 2

[[3]]
[1] 3

> names(a) <- c(4, 5, 6)
> a
$`4`
[1] 1

$`5`
[1] 2 …
Run Code Online (Sandbox Code Playgroud)

r

0
推荐指数
1
解决办法
84
查看次数

标签 统计

r ×5

data.table ×1

dictionary ×1

hash ×1

hashtable ×1