R - 从列表中选择符合条件的元素

时间:2015-11-26 03:56:36

标签: r list lapply sapply

我很难从符合功能的列表中选择元素。所以用解决方案记录相同内容。

check.digits <- function(x){ grepl('^(\\d+)$' , x) }

x = "741 abc pqr street 71 15 41 510741"
lx = strsplit(x, split = " ", fixed = TRUE)
lapply(lx, check.digits)

这不起作用 -

lx[[1]][c(lapply(lx, check.digits))]

使用 -

lx[[1]][sapply(lx, check.digits)]

感谢!!!

2 个答案:

答案 0 :(得分:3)

考虑到你所追求的,也许你应该使用gregexpr + regmatches

regmatches(x, gregexpr("\\d+", x))
# [[1]]
# [1] "741"    "71"     "15"     "41"     "510741"

或者,从&#34; qdapRegex&#34;,使用rm_number

library(qdapRegex)
rm_number(x, extract = TRUE)
# [[1]]
# [1] "741"    "71"     "15"     "41"     "510741"

或者,从&#34; stringi&#34;,使用stri_extract_all_regex

library(stringi)
stri_extract_all_regex(x, "\\d+")
# [[1]]
# [1] "741"    "71"     "15"     "41"     "510741"

如果您只处理单个字符串并且只对单个向量感兴趣,请在末尾添加[[1]]

答案 1 :(得分:1)

使用

lx[[1]][sapply(lx, check.digits)]
[1] "741"    "71"     "15"     "41"     "510741"