【问题标题】:Extracting from a list with different sized elements R从具有不同大小元素 R 的列表中提取
【发布时间】:2020-07-08 09:18:14
【问题描述】:

我目前正在处理具有从 str_locate_all() 返回的各种值的项目列表。它返回一个看起来像这样的列表

library(stringr)
location <- str_locate_all(pattern = matched_query, query_string)
location

[[1]]
     start end
[1,]     1  3

[[2]]
     start end
[1,]     2  4
[2,]    11  13
[3,]   221 223

[[3]]
     start end
[1,]    12  14
[2,]   222 224

[[4]]
     start end
[1,]    20  22

我想对列表进行子集化以获取和分离“开始”和“结束”下的所有值。 c(1,2,11,221,12,222,20) c(3,4,13,223,14,224,22)

当我取消列出它们时,具有多个匹配项的组不会保留“开始”“停止”“开始”“停止”模式 - 它们具有“开始”“开始”“停止”“停止”模式。

到目前为止我已经尝试过:

 sapply(location,'[[',1)
1   2   12   20
lapply(query_wordsize_location,'[[',1)
[[1]]
[1] 1

[[2]]
[1] 2

[[3]]
[1] 12

[[4]]
[1] 20
location[[1]][,1]

start 
    1 

location[[1:4]][,1]
Error in location[[1:4]] : 
  recursive indexing failed at level 2

我可以让它与循环一起工作,但我试图避免这种情况,因为它是一个相当大的列表。

【问题讨论】:

  • do.call(rbind, location) ?

标签: r list subset stringr


【解决方案1】:

您想在这种情况下使用do.call

location <- list(matrix(1:6, ncol = 2), matrix(1:4, ncol = 2), 
                 matrix(1:2, ncol = 2), matrix(1:6, ncol = 2))
location
# [[1]]
#      [,1] [,2]
# [1,]    1    4
# [2,]    2    5
# [3,]    3    6
#
# [[2]]
#      [,1] [,2]
# [1,]    1    3
# [2,]    2    4
#  
# [[3]]
#      [,1] [,2]
# [1,]    1    2
#
# [[4]]
#      [,1] [,2]
# [1,]    1    4
# [2,]    2    5
# [3,]    3    6

do.call(rbind, location)
#      [,1] [,2]
# [1,]    1    4
# [2,]    2    5
# [3,]    3    6
# [4,]    1    3
# [5,]    2    4
# [6,]    1    2
# [7,]    1    4
# [8,]    2    5
# [9,]    3    6

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-14
    • 2012-09-21
    • 2021-03-11
    • 1970-01-01
    • 2013-05-29
    相关资源
    最近更新 更多