这是关于R中列表行为的一般性问题,但具体问题是:
我有一组单词列表,我试图手动删除特定单词 - 其中没有提到两次单词。
目前,我正在使用此方法
l = strsplit(c("a b", "c d"), " ")
> l
[[1]]
[1] "a" "b"
[[2]]
[1] "c" "d"
# remove the value "d"
l = lapply(l, function(x) { x[x != "d"] })
> l
[[1]]
[1] "a" "b"
[[2]]
[1] "c"
是否有任何类型的内置列表索引方法更适合使用?我觉得我应该能够在不使用lapply
的情况下解析列表。如果没有,有人可以解释为什么会这样吗?
由于
答案 0 :(得分:1)
您需要遍历列表中的每个元素,并检查向量是否包含d
来过滤/删除它。
其中一个原因是列表可以包含各种类型的数据(functions
,data.frame
,numeric
,character
,boolean
,其他{{1} },lists
)所以不能进行class
次操作(对于向量而言 - 就像名称一样)。
您要做的是过滤前端过滤器 - 例如,当您有列表时。最好在后端过滤你的矢量,例如在获得vectorized
之前:
list
前端过滤的一些替代解决方案:
l = strsplit(gsub('d','',c("a b", "c d")), " ")
#[[1]]
#[1] "a" "b"
#[[2]]
#[1] "c"