操作 R 中字符列表的列表

Manipulate list of character lists in R

我有一个 list 未命名的逗号分隔字符列表:

> list
[[1]]
[1] "A" "B" "C" "D"

[[2]]
[1] "E" "F" "G"

实际列表很长,其中的每个字符列表都是随机长度的,并且包含不同的、不可预测的字符组合。我需要对所有字符列表的每个元素应用三项内容:

我是 R 的新手,我猜这是一项微不足道的任务。如果有人愿意帮助我,我会很高兴!干杯:)

要对列表进行任何操作,您可以使用 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)

原则总是一样的:每次我创建一个匿名函数,它将一个向量作为输入,returns 自适应向量作为输出。 lapply 将确保将这些不同的元素重新组合成一个列表。