我试图编写一个基本上像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中完成这项工作的最佳方法是什么?谢谢。
答案 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)