我有一个list
未命名的逗号分隔字符列表:
> list
[[1]]
[1] "A" "B" "C" "D"
[[2]]
[1] "E" "F" "G"
实际列表很长,其中的每个字符列表都是随机长度,包含不同的,不可预测的字符组合。我需要对所有字符列表的每个元素应用三个内容:
我是R的新手并且猜测这是一项微不足道的任务。如果有人愿意帮助我,我会很高兴!干杯:)
答案 0 :(得分:1)
要对列表执行任何操作,您可以使用apply
系列对其进行循环。使用lapply
可以获得列表,这就是您想要的。 lapply
将列表作为第一个参数,然后是您想要的任何类型的函数。
所以,让我们从:
开始mylist <- list(
LETTERS[1:4],
LETTERS[5:7],
c("A/BCD","H","J")
)
删除列表中每个元素的"A"
如下:
lapply(mylist, function(x) x[x!="A"])
替换元素会是这样的:
lapply(mylist, function(x) {
id <- x == "B"
x[id] <- "F"
return(x)
})
可以使用gsub
像这样编辑每个元素中的值:
lapply(mylist, function(x){
gsub("/.+","",x)
})
您可以将所有内容组合在一个函数中,然后将该函数应用于列表。您不必在lapply
调用中将其创建为匿名函数,您可以预先定义它,然后像这样使用它:
cleanup <- function(x){
x <- gsub("/.+","",x) # remove extra info
id <- x %in% c("A","H")
x[id] <- "F"
return(x)
}
lapply(mylist, cleanup)
原则总是一样的:每次我创建一个匿名函数,它将一个向量作为输入并返回适应的向量作为输出。 lapply
将确保将这些不同的元素组合回列表中。