R中的模拟字典

时间:2018-03-12 20:35:31

标签: r dictionary dataframe

我试图编写一个基本上像R中的字典一样的函数。我喜欢的映射是:

'一个' - > ' 1','两个' - > ' 2','三' - > ' 3','四' - > ' 4'

并且该函数将结果组合成一个字符串(我可以使用paste()执行此操作)。

因此,当函数输入x <- c('one, 'two', 'four')时,输出将为"1, 2, 4"

我尝试过使用这样的数据框:

keys <- c('one', 'two', 'three', 'four')
values <- ('1', '2', '3', '4')
dict <- data.frame(keys, values)

但我似乎无法调用keys的特定值来获取相应的值。此外,这似乎不是一种非常有效的方法。在R中完成这项工作的最佳方法是什么?谢谢。

3 个答案:

答案 0 :(得分:3)

你叫什么&#34;键&#34;您可以将其视为相应值的名称:

nums <- c('1','2','3','4')
names(nums) <- c('one','two','three','four')
f <- function(v)paste(nums[v],collapse = ', ')

例如,

> f(c('one', 'three', 'four', 'three'))
[1] "1, 3, 4, 3"

R中缺少内置字典/哈希表是该语言的缺点。 Here是对各种解决方法的有趣讨论。根据您的需要,您可能希望尝试使用包hash

答案 1 :(得分:0)

我相信list是R中最接近的字典形式。例如:

# create a list
nums <- list('1','2','3','4') # value 
names(nums) <- c('a','b','c','d') # keys

# function which extract values
func <- function(f)
{
    return(nums[[f]])
}

# extract value 
print(func('a'))
[1] "1"

答案 2 :(得分:0)

您可以在R中使用dict包,但不能在CRAN上使用,但可以通过github安装。有关安装说明,请参阅自述文件。未经测试的解决方案,但我认为它应该工作!

library(dict)

# Initialize 
d <- dict() 
l <- list(1,2,3,4)
l1 <- list("one","two","three","four") 

# Loop to create a dictionary     
for(i in 1:length(l)) {
   for(j in 1:length(l1) {

       d[[ l[i] ]] <-  l1[j]

   }
}


# Function to return the value when passed corresponding key
func <- function(k) {

    return(d$get[k])

}

# Func call
func(1)