0

我有一个非常大的数据集,我已经分箱,并将每个箱(子集)存储为一个列表,以便我可以轻松地调用任何给定的子集。我的问题是在子集中调用特定列。

例如,我的数据(以直径和强度为列)按直径分为 20 个箱。我手动将数据分箱,如下所示:

subset.1 <- subset(mydata, Diameter <= 0.01)

使用了类似的命令来制作 20 个垃圾箱。然后我将名称(子集 1 到子集 20)存储到一个列表中:

diameter.bin<-list(subset.1, ... , subset.20)

我可以使用以下方法成功调用每个直径箱:

diameter.bin[x]

现在,如果我只想查看给定直径箱的强度值,我可以使用原始名称(存储在列表中):

subset.x$Strength

但我无法使用列表调用获取此信息:

diameter.bin[x]$Strength

该命令返回NULL

请注意,当我调用任何子集(通过diameter.bin[x]subset.x甚至subset.x$Strength)时,我的列标题会显示出来。当我使用:

names(subset.1)

这返回"Diameter""Strength"

但是当我使用:

names(diameter.bin[1])

这返回NULL

我假设列标题是问题的一部分,但我不确定如何解决它,除了从原始数据文件中删除标题。如果可能的话,我宁愿不这样做。

最终目标是查看每个直径箱的强度值分布,所以我将做一些事情,比如绘制直方图、计算参数等。我希望按照这些方式做一些事情来生成直方图:

n=length(diameter.bin)
for(i in (1:n))
{
  hist(diameter.bin[i]$Strength)
}

并执行与此类似的操作,将每个 bin 的中值存储在新向量中。

非常感谢任何提示,因为现在我一次只做 1 个 bin,而且我知道循环(或类似的东西)真的会加快我的分析速度。

4

1 回答 1

4

你需要两个方括号。这是一个演示该问题的可重现示例:

> diam <- data.frame(x=rnorm(5), y=rnorm(5))
> 
> diam.l <- list(diam, diam)
> diam.l[1]$x
NULL
> diam.l[[1]]$x
[1] -0.5389441 -0.5155441 -1.2437108 -2.0044323 -0.6914124
于 2013-03-11T18:33:55.560 回答