【问题标题】:R - Reformat listR - 重新格式化列表
【发布时间】:2018-02-11 16:21:00
【问题描述】:

我正在尝试格式化一个列表,以便它可以被另一个函数解释。我有标记词的向量列表及其词性标签,如下所示:

> tokens
[[1]]
[1] "This" "is"   "a"    "test" "!"   

[[2]]
[1] "This" "is"   "a"    "test" "!"   

> pos_tags
[[1]]
[1] "DT"  "VBZ" "DT"  "NN"  "."  

[[2]]
[1] "DT"  "VBZ" "DT"  "NN"  "." 

我想将它们重新格式化为如下列表。对于任何长度的列表,此过程都应该是可重现的。

[[1]]
[[1]][[1]]
[[1]][[1]][[1]]
[1] "This"

[[1]][[1]][[2]]
[1] "DT"


[[1]][[2]]
[[1]][[2]][[1]]
[1] "is"

[[1]][[2]][[2]]
[1] "VBZ"


[[1]][[3]]
[[1]][[3]][[1]]
[1] "a"

[[1]][[3]][[2]]
[1] "DT"


[[1]][[4]]
[[1]][[4]][[1]]
[1] "test"

[[1]][[4]][[2]]
[1] "NN"


[[1]][[5]]
[[1]][[5]][[1]]
[1] "!"

[[1]][[5]][[2]]
[1] "."



[[2]]
[[2]][[1]]
[[2]][[1]][[1]]
[1] "This"

[[2]][[1]][[2]]
[1] "DT"


[[2]][[2]]
[[2]][[2]][[1]]
[1] "is"

[[2]][[2]][[2]]
[1] "VBZ"


[[2]][[3]]
[[2]][[3]][[1]]
[1] "a"

[[2]][[3]][[2]]
[1] "DT"


[[2]][[4]]
[[2]][[4]][[1]]
[1] "test"

[[2]][[4]][[2]]
[1] "NN"


[[2]][[5]]
[[2]][[5]][[1]]
[1] "!"

[[2]][[5]][[2]]
[1] "."

任何指导将不胜感激。

【问题讨论】:

    标签: java r gcc rjava


    【解决方案1】:
    Map(function(x,y)as.list(c(rbind(x,y))),tokens,pos_tags)
    [[1]]
    [[1]][[1]]
    [1] "This"
    
    [[1]][[2]]
    [1] "DT"
    
    [[1]][[3]]
    [1] "is"
    
    [[1]][[4]]
    [1] "VBZ"
    
    [[1]][[5]]
    [1] "a"
    
    [[1]][[6]]
    [1] "DT"
    
    [[1]][[7]]
    [1] "test"
    
    [[1]][[8]]
    [1] "NN"
    
    [[1]][[9]]
    [1] "!"
    
    [[1]][[10]]
    [1] "."
    
    
    [[2]]
    [[2]][[1]]
    [1] "This"
    
    [[2]][[2]]
    [1] "DT"
    
    [[2]][[3]]
    [1] "is"
    
    [[2]][[4]]
    [1] "VBZ"
    
    [[2]][[5]]
    [1] "a"
    
    [[2]][[6]]
    [1] "DT"
    
    [[2]][[7]]
    [1] "test"
    
    [[2]][[8]]
    [1] "NN"
    
    [[2]][[9]]
    [1] "!"
    
    [[2]][[10]]
    [1] "."
    

    【讨论】:

      【解决方案2】:

      一种选择是在R 中使用双重Map

      Map(function(x, y) Map(list, as.list(x), as.list(y)), tokens, pos_tags)
      #[[1]]
      #[[1]][[1]]
      #[[1]][[1]][[1]]
      #[1] "This"
      
      #[[1]][[1]][[2]]
      #[1] "DT"
      
      
      #[[1]][[2]]
      #[[1]][[2]][[1]]
      #[1] "is"
      
      #[[1]][[2]][[2]]
      #[1] "VBZ"
      
      
      #[[1]][[3]]
      #[[1]][[3]][[1]]
      #[1] "a"
      
      #[[1]][[3]][[2]]
      #[1] "DT"
      
      
      #[[1]][[4]]
      #[[1]][[4]][[1]]
      #[1] "test"
      
      #[[1]][[4]][[2]]
      #[1] "NN"
      
      
      #[[1]][[5]]
      #[[1]][[5]][[1]]
      #[1] "!"
      
      #[[1]][[5]][[2]]
      #[1] "."
      
      
      
      #[[2]]
      #[[2]][[1]]
      #[[2]][[1]][[1]]
      #[1] "This"
      
      #[[2]][[1]][[2]]
      #[1] "DT"
      
      
      #[[2]][[2]]
      #[[2]][[2]][[1]]
      #[1] "is"
      
      #[[2]][[2]][[2]]
      #[1] "VBZ"
      
      
      #[[2]][[3]]
      #[[2]][[3]][[1]]
      #[1] "a"
      
      #[[2]][[3]][[2]]
      #[1] "DT"
      
      
      #[[2]][[4]]
      #[[2]][[4]][[1]]
      #[1] "test"
      
      #[[2]][[4]][[2]]
      #[1] "NN"
      
      
      #[[2]][[5]]
      #[[2]][[5]][[1]]
      #[1] "!"
      
      #[[2]][[5]][[2]]
      #[1] "."
      

      数据

      tokens <- list(c("This", "is", "a", "test", "!"), c("This", "is", "a", "test", "!"))
      
      pos_tags <- list(c("DT", "VBZ", "DT", "NN", "."), c("DT", "VBZ", "DT", "NN", "."))
      

      【讨论】:

      • 我运行它并收到警告:警告消息:1:在 mapply(FUN = f,...,SIMPLIFY = FALSE):较长的参数不是较短长度的倍数 2:在 mapply (FUN = f, ..., SIMPLIFY = FALSE) : 更长的参数不是更短的长度的倍数
      • @ChristopherCostello 我正在使用两个长度与您的问题相同的列表(请检查我使用的data
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-05-02
      • 1970-01-01
      • 2016-08-20
      • 2020-10-21
      • 1970-01-01
      • 2016-02-27
      • 1970-01-01
      相关资源
      最近更新 更多