r - 如何将值列表分配给 R 中的 HashMap ?

标签 r hashmap

基本上,这个想法是让值 n=10,20,30,...100 取 10,000 个随机样本的平均值,保存 10,000 个平均值以供以后使用。

在我更习惯的语言中,我会使用每个 n 作为键,并使用平均值列表作为值来创建一个 HashMap 。

以 JavaScript 为例:

var mydata
var map = {}

for (int i = 10; i <= 100; i += 10 ) {
  map[i] = [] // create list
  for (int j = 0; j < 10000; j++) {
    map[i][j] = mean(sample(mydata, i))
  }
}

现在我尝试在 R 中执行此操作(这是我第一次使用它),结果是:

hashmap  <- new.env()
sunspots <- read.table("sunspots.txt")

for (i in seq(10, 100, by=10)) {
  hashmap[[i]] <- c()
  for (j in 1:10000) {
    hashmap[[i]][j] <- mean(sample(sunspots$x, i))
  }
}

但是这会引发错误:

wrong args for environment subassignment

即使它没有抛出此错误,我也不完全确定我是否以正确的方式处理它。

有人可以帮助我了解解决此问题的正确方法吗?

最佳答案

这里的问题是 i 是一个数字,并且环境必须由字符串作为键控。因此,您眼前的问题可以通过简单的 as.character() 来解决。当用于索引 hashmap 时对 i 变量进行强制转换。

我还建议您将内部循环重构为向量化函数调用,例如 replicate() 。我将这样做:

set.seed(1L);
test.data <- 1:200;
N <- 3L;
e <- new.env();
for (i in seq(10L,100L,10L)) e[[as.character(i)]] <- replicate(N,mean(sample(test.data,i)));

结果:

ls(e);
##  [1] "10"  "100" "20"  "30"  "40"  "50"  "60"  "70"  "80"  "90"
for (i in seq(10L,100L,10L)) print(e[[as.character(i)]]);
## [1] 108.3 109.4  82.4
## [1] 108.50  93.65 106.20
## [1] 103.3333  96.0000 101.2333
## [1] 98.075 95.250 83.275
## [1] 106.68  97.48 107.34
## [1]  97.48333 105.95000  98.76667
## [1] 101.8857 102.4857 114.6000
## [1]  99.5875 107.0875  96.0750
## [1]  92.9000 103.0889 100.7889
## [1]  91.19  99.80 101.57

您可以将 N 更改为 10000,将 test.data 更改为 sunspots 以获取真实数据。


此外,这里还有一个生成矩阵输出的替代方案,它是围绕 sapply() 的便捷功能构建的。它从 FUN() 返回多元素返回值的矩阵:

set.seed(1L);
sapply(seq(10L,100L,10L),function(i) replicate(N,mean(sample(test.data,i))));
##       [,1]   [,2]     [,3]   [,4]   [,5]      [,6]     [,7]     [,8]     [,9]  [,10]
## [1,] 108.3 108.50 103.3333 98.075 106.68  97.48333 101.8857  99.5875  92.9000  91.19
## [2,] 109.4  93.65  96.0000 95.250  97.48 105.95000 102.4857 107.0875 103.0889  99.80
## [3,]  82.4 106.20 101.2333 83.275 107.34  98.76667 114.6000  96.0750 100.7889 101.57

关于r - 如何将值列表分配给 R 中的 HashMap ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35445996/

相关文章:

regex - 删除R中的小数

r - 基于成对距离的聚类组

r - 将数据框中的因子转换为整数

java - HashMap(它)会做什么?

Java Set of Maps hashCode 不正确?

r - 外部函数调用中的 NA/NaN/Inf (arg 6)

r - apply() 到 data.frame 的列

日期的 Java hashmap 搜索键

java - 包含依赖于 HashMap 大小的 HashMap 操作吗?

java - 如何正确使用Map.Entry接口(interface),为什么Map.Entry的方法已经实现了?