对于这种情况,列表的元素最好是原子向量,而不是列表本身。比如这样:
mylist <- list(
c("tata","titi","toto","tete"),
c("fifi","fafa","toto","fefe"),
c("fifi","toto","rere","rara")
)
您可以通过说mylist_atomic <- lapply(mylist, unlist) 之类的话将您的原始格式转换为这种格式。
如果我正确理解您的问题,您希望将列表中的每个元素过滤为仅未出现在 >1 列表元素中的字符串。
如果您不关心效率,这是实现此目的的一种直接方法:
appears_in <- function(mylist, string){
# check how many elements of `mylist` the arg `string` appears in
return(sum(sapply(mylist, function(v) string %in% v)))
}
filter_list <- function(mylist){
result <- vector(mode='list', length=3)
for (idx in seq_along(mylist)){
elem <- mylist[[idx]]
for (string in elem){
if (appears_in(mylist, string) == 1){
result[[idx]] <- c(result[[idx]], string)
}
}
}
return(result)
}
然后你可以像这样调用filter_list():
mylist_original <- list(
c("tata","titi","toto","tete"),
c("fifi","fafa","toto","fefe"),
c("fifi","toto","rere","rara")
)
mylist_filtered <- filter_list(mylist_original)
print(mylist_filtered)
# [[1]]
# [1] "tata" "titi" "tete"
#
# [[2]]
# [1] "fafa" "fefe"
#
# [[3]]
# [1] "rere" "rara"
给猫剥皮的方法有很多种,这就是其中之一。