【问题标题】:Is there an R function to repeatedly create objects?是否有一个 R 函数来重复创建对象?
【发布时间】:2021-03-28 09:16:15
【问题描述】:

我有一个数据框(虽然我不认为我拥有的源对象类型很重要),其中包含我想获取路径信息的 51 个基因列表(使用 rWikiPathways,但是,再次,这也可以应用于更普遍的问题)。

我想使用从 rWikiPathways 检索到的信息为这 51 个基因中的每一个创建一个对象。

我一直在尝试使用 for 循环、分配和粘贴函数,但没有什么能像我希望的那样真正起作用,所以我最终将这行代码复制了 51 次:

pathway.gene.1 <- findPathwaysByXref(genes$Encode.ID[1], "En")

pathway.gene.2 <- findPathwaysByXref(genes$Encode.ID[2], "En")

...

pathway.gene.51 <- findPathwaysByXref(genes$Encode.ID[51], "En")

请注意,“...gene.1”和“Encode.ID[1]”都从 1 变为 51。

必须有一种方法可以自动执行此操作...我是初学者,无法真正做到。

有什么建议吗?

欢呼, 圭多

【问题讨论】:

  • pathway.gene <- lapply(genes$Encode.ID, findPathwaysByXref, "En")?
  • 我更喜欢使用框架列表,而不是环境中的单个、相同用途/结构化对象。快速查看stackoverflow.com/a/24376207/3358227,从中您可能会看到使用lapply 并将所有返回值捕获到单个list 中的价值。我上面的lapply 可以稍微改进一下,以便name 条目(如果需要的话),但其他方面就像我推荐的那样通用。从这里开始,无论您倾向于对一个 pathway.gene.# 对象做什么,都可以使用 lapply(pathway.gene, function(pwg) ...) 对所有对象执行。
  • 谢谢!这与@ThomasIsCoding 所说的非常相似,制作一个列表列表,实际上是命名其中的每个对象。

标签: r loops for-loop object


【解决方案1】:

也许你需要list2env

list2env(setNames(Vectorize(findPathwaysByXref)(genes$Encode.ID,"En"),paste0("pathway.gene.",1:51)),.GlobalEnv)

list2env(setNames(lapply(genes$Encode.ID, findPathwaysByXref, "En"),paste0("pathway.gene.",1:51),.GlobalEnv)

说明: 代码setNames(lapply(genes$Encode.ID, findPathwaysByXref, "En"),paste0("pathway.gene.",1:51) 为您提供从findPathwaysByXref 获得的值的命名列表,list2env 帮助您从列表中生成具有给定名称的对象到全局环境。

【讨论】:

  • 但是,您又产生了一个新问题:在您的环境中使用pathway.gene.1pathway.gene.2pathway.gene.3、...、pathway.gene.51,您如何使用它们?你可以用getassign 弄乱很多东西,但是不管你接下来的步骤是什么,将它们放在一个列表中(跳过这个答案的list2env 部分)通常要容易得多。
  • 嘿,这帮了大忙!真的是我一直在寻找的,因为现在我有一个列表列表,并且最终可以查看它以提取个人数据等。确实,list2env 所做的对于我可能需要的东西来说可能有点太多了。非常感谢!
  • @GregorThomas 是的,确实如此,为了方便使用,最好将所有这些对象都放在列表中而不是全局环境中
  • @GTrentadue 欢迎您!也许你可以跳过list2env
猜你喜欢
  • 2021-11-17
  • 1970-01-01
  • 2021-12-04
  • 2019-12-24
  • 2019-02-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多