首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在R环境中迭代哈希项?

如何在R环境中迭代哈希项?
EN

Stack Overflow用户
提问于 2011-09-14 10:13:42
回答 2查看 7.5K关注 0票数 8

我试图找到一种在R中使用散列映射的方法,经过一些搜索,我得到了R-environment。但是,如何遍历环境中的所有项呢?当我运行以下代码时,我期望输出如下所示:

1

2

但是我得到了两行NULL,我怎么才能得到我想要的东西呢?

代码语言:javascript
复制
map <- new.env(hash=T, parent=emptyenv())
assign('a', 1, map)
assign('b', 2, map)
for (v in ls(map)) {
    print(map$v)
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-09-14 10:36:06

在需要解释输入的函数中使用"$“是编程错误的常见来源。请改用表单对象[value]

代码语言:javascript
复制
for (v in ls(map)) {
    print(map[[v]])
}
票数 12
EN

Stack Overflow用户

发布于 2011-09-14 10:18:07

这取决于你想做什么。我假设上面的print示例只是一个示例,但您可能想要做更多的事情,而不仅仅是打印!

如果您想根据环境的每个元素获取一个对象,那么可以使用eapply(env, function)。它的工作方式与其他*apply()函数类似。它返回一个列表,该列表的对象是您从传递给eapply()的函数中创建的对象,其名称是从环境中复制过来的。

例如,在您的特定情况下

代码语言:javascript
复制
map <- new.env(hash=T, parent=emptyenv())  
assign('a', 1, map)  
assign('b', 2, map)  

eapply(map, identity)

返回两个元素的列表。它看起来很像一个哈希表,表明您可以将哈希表实现为一个列表,而不是一个环境(这有点非正统,但确实很有趣)。

要了解这对于一些重要的自定义函数是如何工作的,请看下面的示例

代码语言:javascript
复制
eapply(map, function(e) {
  # e here stands for a copy of an element of the environment
  e <- my.function(e)
  my.other.function(e)
})

如果你想为一个环境的每个元素做一些事情,而不是在最后返回一个列表对象,你应该使用一个for循环,就像@DWin在他的回答中所做的那样。

不过,我担心的是,您不会真的只想打印,而是最终会基于您的“哈希表”元素创建对象,然后将它们重新填充到列表中进行进一步处理。在这种情况下,您应该真正使用eapply()。代码会更整洁,更符合R的习惯用法。它负责为您迭代和创建结果列表。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7410561

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档