操作 R 中字符列表的列表
Manipulate list of character lists in R
我有一个 list
未命名的逗号分隔字符列表:
> list
[[1]]
[1] "A" "B" "C" "D"
[[2]]
[1] "E" "F" "G"
实际列表很长,其中的每个字符列表都是随机长度的,并且包含不同的、不可预测的字符组合。我需要对所有字符列表的每个元素应用三项内容:
- 有条件地删除个元素,比如所有等于"A"
的元素
- 有条件地替换元素,假设所有等于"A"的元素都为"B"
- 如果任何元素包含“/”,例如一个等于 "A/BCD" 的元素,然后删除“/”右侧的所有内容,包括“/”本身,以便在该特定情况下我最终得到 "A"。
我是 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
将确保将这些不同的元素重新组合成一个列表。
我有一个 list
未命名的逗号分隔字符列表:
> list
[[1]]
[1] "A" "B" "C" "D"
[[2]]
[1] "E" "F" "G"
实际列表很长,其中的每个字符列表都是随机长度的,并且包含不同的、不可预测的字符组合。我需要对所有字符列表的每个元素应用三项内容:
- 有条件地删除个元素,比如所有等于"A" 的元素
- 有条件地替换元素,假设所有等于"A"的元素都为"B"
- 如果任何元素包含“/”,例如一个等于 "A/BCD" 的元素,然后删除“/”右侧的所有内容,包括“/”本身,以便在该特定情况下我最终得到 "A"。
我是 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
将确保将这些不同的元素重新组合成一个列表。