使用`paste`d向量引用执行计算

时间:2012-11-03 23:21:54

标签: r for-loop automation paste

所以我有一些激光雷达数据,我想计算一些指标(我会在评论中附加一个指向数据的链接)。
我也有地面图,我已经提取了激光雷达点周围,所以我每个情节有几百点(19个地块)。每个点都有X,Y,Z,地面以上的高度以及相关的图。

我需要在图表级别计算一堆指标,因此我使用plotsgrouped创建了split(plotpts, plotpts$AssocPlot)
所以现在我有一个数据框,每个绘图都有一个“页面”,所以我可以通过“绘图页面”计算我的所有指标。这对于个别情节来说只是花花公子,但我想自动化它。 (是的,我知道只有19个情节,但这是它的原理,它是真的!:-P)
到目前为止,我有一个for循环计算指标并将结果放在一个名为Results的数据框中。我将这些组的名称也放入了一个名为groups的列表中。

for(i in 1:length(groups)){
Results$Plot[i] <- groups[i]
Results$Mean[i] <- mean(plotsgrouped$PLT01$Z)
Results$Std.Dev.[i] <- sd(plotsgrouped$PLT01$Z)
Results$Max[i] <- max(plotsgrouped$PLT01$Z)
Results$75%Avg.[i] <- mean(plotsgrouped$PLT01$Z[plotsgrouped$PLT01$Z <= quantile(plotsgrouped$PLT01$Z, .75)])
Results$50%Avg.[i] <- mean(plotsgrouped$PLT01$Z[plotsgrouped$PLT01$Z <= quantile(plotsgrouped$PLT01$Z, .50)])
...
and so on.

当我尝试做类似的事情时出现问题:
Results$mean[i] <- mean(paste("plotsgrouped", groups[i],"Z", sep="$"))mean()无法将paste识别为对向量plotsgrouped$PLT27$Z的引用,而是失败。我推断这是因为它看到引号并且认为,“哦,你只是一些文字,我无法理解你的意思。”或类似的东西。
btw,groups是19个绘图名称的列表:PLT01-PLT27(有时是非连续的)和FTWR,所以我不能简单地为名称的数字部分添加序列。
任何人都可以更轻松地遍历我的测试图并获得任意指标吗? 我觉得我拥有所有正确的作品,但只是不知道他们如何一起给我我想要的东西。
此外,如果有人能够提出更好的问题标题,请随意发布或更改或其他任何内容。

1 个答案:

答案 0 :(得分:5)

尝试:

for(i in seq_along(groups)) {

  Results$Plot[i] <- groups[i] # character names of the groups
  tempZ = plotsgrouped[[groups[i]]][["Z"]]
  Results$Mean[i] <- mean(tempZ)
  Results$Std.Dev.[i] <- sd(tempZ)
  Results$Max[i] <- max(tempZ)
  Results$75%Avg.[i] <- mean(tempZ[tempZ <= quantile(tempZ, .75)])
  Results$50%Avg.[i] <- mean(tempZ[tempZ <= quantile(tempZ, .50)])

}