gpt4 book ai didi

R-thonic 替换包含条件的简单 for 循环

转载 作者:行者123 更新时间:2023-12-01 12:00:29 26 4
gpt4 key购买 nike

我正在使用 R,而且我是初学者。我有两个大列表(每个列表 30K 个元素)。一个称为 descriptions,其中每个元素(可能)是一个标记化的字符串。另一个称为 probes,其中每个元素都是一个数字。我需要制作一个字典,将 probes 映射到 descriptions 中的内容(如果有的话)。以下是我的处理方式:

probe2gene <- list()
for (i in 1:length(probes)){
strings<-strsplit(descriptions[i]), '//')
if (length(strings[[1]]) > 1){
probe2gene[probes[i]] = strings[[1]][2]
}
}

它工作正常,但看起来很慢,比大致等效的 python 慢得多:

probe2gene = {}
for p,d in zip(probes, descriptions):
try:
probe2gene[p] = descriptions.split('//')[1]
except IndexError:
pass

我的问题:是否有一种“R-thonic”方式来做我想做的事情? R manual entry on for loops表明这种循环很少见。有更好的解决方案吗?

编辑:一个典型的好的“描述”看起来像这样:

"NM_009826 // Rb1cc1 // RB1-inducible coiled-coil 1 // 1 A2 // 12421 /// AB070619 // Rb1cc1 // RB1-inducible coiled-coil 1 // 1 A2 // 12421 /// ENSMUST00000027040 // Rb1cc1 // RB1-inducible coiled-coil 1 // 1 A2 // 12421"

糟糕的“描述:看起来像这样

"-----"

虽然它很容易成为一些其他不是很有用的字符串。每个探测器只是一个数字。 probedescription向量长度相同,完全对应,即probe[i]映射到description[我].

最佳答案

如果您使用各种类似应用的函数,而不是循环,在 R 中通常会更好。我认为这可以解决您的问题;唯一的缺点是您必须使用字符串键。

> descriptions <- c("foo//bar", "")
> probes <- c(10, 20)
> probe2gene <- lapply(strsplit(descriptions, "//"), function (x) x[2])
> names(probe2gene) <- probes
> probe2gene <- probe2gene[!is.na(probe2gene)]
> probe2gene[["10"]]
[1] "bar"

不幸的是,R 没有好的字典/ map 类型。我发现最接近的是使用列表作为从字符串到值的映射。这似乎是惯用的,但它很难看。

关于R-thonic 替换包含条件的简单 for 循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2239851/

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