gpt4 book ai didi

r - 在列表列表上嵌套应用语句

转载 作者:行者123 更新时间:2023-12-02 07:17:42 28 4
gpt4 key购买 nike

我想在 seq.df(单列 df)中提取与匹配的 map.list(列表的列表)中的索引匹配的蛋白质。

示例数据:

seq.df<- rbind.data.frame("MTHISPAVYGLWAIMSVLLAAFCAY",
"MERSSAIVFPNVGTSVLSATIHLVGVTVLAHLISRRTALRGTST",
"MLFEPFWCLLDLLRWSLDTHYIPAKRPLNGGGRSSNFD")
map.list<- list(a<- list(2,3,4,5,6,7),
b<- list(13,14,30,31,32),
c<- list(5,6,10,11))

期望的输出:

THISPA
GTAHL
PFLD

如果我只在 map.list 的第一个子列表上运行嵌套应用,我会得到我想要的第一个蛋白质:

prot.list<- apply(seq.df, 1, function (x) lapply(map.list[[1]], function (y) substring(x, y, y)))

返回第一个序列 (THISSPA,) 的预期结果

但我不确定如何让这个函数遍历 map.list 中的所有子列表。我试图将它包装成一个 for 循环,但它没有给我预期的结果:

for (i in seq_along(map.list)){
each.map.list<- map.list[[i]]
prot.list<- apply(seq.df, 1, function (x) lapply(each.map.list, function (y) substring(x, y, y)))
}

输出:

SPGL
SAPN
PFLD

我更愿意添加另一个 lapply 语句,但我不确定如何在 map.list 中指定每个列表

#this does not work, but something like: 
prot.list<- apply(seq.df, 1, function (x) lapply(map.list, function (y) lapply([[y]], function (z) substring(x, z, z)))

最佳答案

我们可以使用Map

unlist(Map(function(x, y) paste(substring(x, unlist(y), 
unlist(y)), collapse=""), seq.df[[1]], map.list))
#[1] "THISPA" "GTAHL" "PFLD"

此外,而不是 unlist ing 两次,我们可以做一个 unlist一开始使用扁平的list作为输入

l1 <- lapply(map.list, unlist)  
sapply(Map(substring, seq.df[[1]], first = l1, last = l1), paste, collapse="")
#[1] "THISPA" "GTAHL" "PFLD"

或用map2来自 purrr

library(purrr)
map2_chr(seq.df[[1]], map.list, ~ str_c(substring(.x,
unlist(.y), unlist(.y)), collapse=""))

关于r - 在列表列表上嵌套应用语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56797418/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com