R 删除列表元素的元素
R Removing an element of a list element
这是关于 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
的情况下解析列表。如果不是,是否有人可以解释为什么会这样?
谢谢
您需要遍历列表的每个元素并检查向量是否包含 d
到 filter/remove 它。
原因之一是列表可以包含各种类型的数据(functions
、data.frame
、numeric
、character
、boolean
、其他lists
, class
) 所以不能有 vectorized
操作(正如名称所暗示的那样 - 对于向量)。
你所做的是在前端进行过滤——例如,当你有列表时。最好在后端过滤向量,例如 before 获取 list
:
l = strsplit(gsub('d','',c("a b", "c d")), " ")
#[[1]]
#[1] "a" "b"
#[[2]]
#[1] "c"
前端过滤的一些替代解决方案:
lapply(l, grep, pattern='[^d]', value=T)
这是关于 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
的情况下解析列表。如果不是,是否有人可以解释为什么会这样?
谢谢
您需要遍历列表的每个元素并检查向量是否包含 d
到 filter/remove 它。
原因之一是列表可以包含各种类型的数据(functions
、data.frame
、numeric
、character
、boolean
、其他lists
, class
) 所以不能有 vectorized
操作(正如名称所暗示的那样 - 对于向量)。
你所做的是在前端进行过滤——例如,当你有列表时。最好在后端过滤向量,例如 before 获取 list
:
l = strsplit(gsub('d','',c("a b", "c d")), " ")
#[[1]]
#[1] "a" "b"
#[[2]]
#[1] "c"
前端过滤的一些替代解决方案:
lapply(l, grep, pattern='[^d]', value=T)