如何使用stri_detect函数修改lapply的输出

时间:2017-09-06 02:19:46

标签: r

我有两个角色向量。我需要检查另一个中包含的每个字符串,所以我使用stri_detectlapply(非常快)。

> summary(claims)
   Length     Class      Mode 
   960322 character character 
> summary(rules)
   Length     Class      Mode 
       50 character character 

  > foo <- function(Match){
+ stri_detect_fixed(claims, Match)
+ }

> system.time(lapply(rules,foo))
   user  system elapsed 
  39.04    0.33   39.39 

lapply的结果如下:

[[1]]
   [1] FALSE FALSE FALSE FALSE FALSE FALSE ... #960322 values
[[2]]
   [1] FALSE FALSE FALSE  TRUE FALSE FALSE ... 
...
[[50]]
   [1] FALSE FALSE FALSE ...

我的问题是,如果该行中的每个值都为FALSE或者如果至少某个值为TRUE(或者为1),我怎样才能获得具有FALSE(或0)的向量(长度为50)那一行是真的吗?

我想我可以将lapply的结果保存为数据帧并使用它,但我想知道是否可以直接用lapply完成。

1 个答案:

答案 0 :(得分:0)

修改

@ Dave2e在评论中解决了我的问题。

如果行中的每个值都为FALSE或者存在TRUES的总和,则使用sapply(lapply(rules,foo),sum)得0:

> sapply(lapply(rules,foo),sum)
 [1]  0  0  0  0  0  0  0  0  0  0  1  0  1  1  1  0  0  0  0  0  0  0  2  1  4 10  0  0  0  5  2  0  0  0  1  0 10  1  1  0  1  2  9  0  1 10  0  0  0  2

所以只需使用replace即可得到我想要的内容:

> x = sapply(lapply(rules,foo),sum)
> replace(x, x!=0, 1)
 [1] 0 0 0 0 0 0 0 0 0 0 1 0 1 1 1 0 0 0 0 0 0 0 1 1 1 1 0 0 0 1 1 0 0 0 1 0 1 1 1 0 1 1 1 0 1 1 0 0 0 1