使用 R 访问列表中的项目,在拆分和应用后组合

Accessing items in a list using R, combining after split and apply

我刚刚开始使用 R 清理字符串,到目前为止已经学到了很多东西。我坚持的当前项目部分(我认为)主要与列表中的引用值有关。我正在尝试拆分-应用-组合方法,但最后无法恢复到我想要的数据形式。

我已经尝试了 which()unlist()any() 的各种排列,但似乎无法得到我正在寻找的东西 - 所以我坐在这里,寻求你的帮助。谢谢。

我有一长串字符串...

> dput(x) 

list(c("ACETATE", "RINGERS"), "ACETYLCYSTEINE", c("ACETYLSALICYLIC", 
"ACID"), "ADIRAMYCIN", c("ADRENALINE", "00003901"), "ALEMTUZUMAB")

> x

[[1]]
[1] "ACETATE" "RINGERS"

[[2]]
[1] "ACETYLCYSTEINE"

[[3]]
[1] "ACETYLSALICYLIC" "ACID"           

[[4]]
[1] "ADIRAMYCIN"

[[5]]
[1] "ADRENALINE" "00003901"  

[[6]]
[1] "ALEMTUZUMAB"

我已经编写了从列表中删除特定单词的简单代码...

bad.words <- c("ACID", "BASE", "HYDROCHOLIRDE", "STUFF")
a <- lapply(x, function(x) x %in% bad.words) 

> a

[[1]]
[1] FALSE FALSE

[[2]]
[1] FALSE

[[3]]
[1] FALSE  TRUE

[[4]]
[1] FALSE

[[5]]
[1] FALSE FALSE

[[6]]
[1] FALSE

我希望能够创建 z,使其成为 x 而没有 bad.words

> z

[[1]]
[1] "ACETATE" "RINGERS"

[[2]]
[1] "ACETYLCYSTEINE"

[[3]]
[1] "ACETYLSALICYLIC"           

[[4]]
[1] "ADIRAMYCIN"

[[5]]
[1] "ADRENALINE" "00003901"  

[[6]]
[1] "ALEMTUZUMAB"

你快到了:

lapply(x, function(z) z[! (z %in% bad.words)])

或者,您可以这样做

lapply(x, function(z) setdiff(z,bad.words))

这对我来说更优雅。