我有两个角色向量。我需要检查另一个中包含的每个字符串,所以我使用stri_detect
和lapply
(非常快)。
> 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完成。
答案 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