【问题标题】:Mock Dictionary in RR中的模拟字典
【发布时间】:2018-08-20 23:46:22
【问题描述】:

我正在尝试编写一个本质上类似于 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 中完成这项工作的最佳方法是什么?谢谢。

【问题讨论】:

    标签: r dictionary dataframe


    【解决方案1】:

    您可以在 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) 
    

    【讨论】:

      【解决方案2】:

      我相信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"
      

      【讨论】:

        【解决方案3】:

        您可以将所谓的“键”视为相应值的名称:

        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

        【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-12-04
        • 2016-11-12
        • 1970-01-01
        • 1970-01-01
        • 2013-03-08
        • 1970-01-01
        相关资源
        最近更新 更多