在循环计数器 and/or 子集函数中应用非整数值,R

Applying non interger values in loop counter and/or subset function, R

我有一个大型数据框(flightFPN,下面的示例),其中的数据对应于不同的组。一组中的对象具有不同的体积,我使用此函数在特定阈值体积上绘制每组中的对象数量:

subflight=subset(flightFPN,Volume>2)
subflightgrouped=data.frame(table(subflight$Cell.ID))
hist(subflightFPN$Volume, breaks=seq(0,11,.2), freq=TRUE, main="Foci          
Volume >2, Flight", xlab="Volume")

使用均值函数,我还查看了给定此特定体积截止值的所有对象的平均焦点数。

   m=mean(subflightgrouped,Freq)

虽然我想做的是绘制每组平均焦点数作为我使用的截止值的函数,(即当我进行截止时每组平均焦点数是多少体积 >1 或 >1.1 等

我一直在尝试以下代码的多种变体,但均无济于事。我想要的是音量截止从 0.5 到 10,步长为 0.1。我认为 "for (i in seq(.5,10,.1)) 的输入会更好,但这根本不起作用。不过,我下面的内容是我最接近可行的东西,它当 Volume cutoff 为 1 时,仅输出结果。非常感谢任何帮助!

 for (i in 1,10)

   {
   largeFPNflight=subset(flightFPN, Volume > i)
   largeFPNflightgrouped=data.frame(table(largeFPNflight$Cell.ID))
   m=mean(largeFPNflightgrouped$Freq)
 }


 plot(i,m)

就示例数据框 flightFPN 而言,Cell.ID 类别指的是一个特定的组。因此,例如 S101006F5 是一个包含 8 个对象(ID 0 到 7)的系列,每个对象都有一个唯一的卷。另一组是 S101006F4,它是 9 个对象(0 到 8)的族。

 File      Volume   Unit    SO  ID  Cell.ID
 S101006F   0.27    um^3    5   0   S101006F5
 S101006F   0.09    um^3    5   1   S101006F5
 S101006F   3.90    um^3    5   2   S101006F5
 S101006F   0.16    um^3    5   3   S101006F5
 S101006F   0.03    um^3    5   4   S101006F5
 S101006F   0.06    um^3    5   5   S101006F5
 S101006F   0.13    um^3    5   6   S101006F5
 S101006F   0.21    um^3    5   7   S101006F5
 S101006F   0.02    um^3    4   0   S101006F4
 S101006F   0.44    um^3    4   1   S101006F4
 S101006F   0.26    um^3    4   2   S101006F4
 S101006F   0.06    um^3    4   3   S101006F4
 S101006F   0.09    um^3    4   4   S101006F4
 S101006F   0.02    um^3    4   5   S101006F4
 S101006F   0.03    um^3    4   6   S101006F4
 S101006F   0.22    um^3    4   7   S101006F4
 S101006F   0.03    um^3    4   8   S101006F4
 S101006F   0.03    um^3    3   0   S101006F3
 S101006F   1.65    um^3    3   1   S101006F3
 S101006F   0.14    um^3    3   2   S101006F3
 S101006F   0.02    um^3    3   3   S101006F3
 S101006F   0.01    um^3    2   0   S101006F2
 S101006F   0.08    um^3    2   1   S101006F2
 S101006F   0.75    um^3    2   2   S101006F2
 S101006F   0.03    um^3    2   3   S101006F2
 S101006F   0.05    um^3    2   4   S101006F2
 S101006F   0.02    um^3    2   5   S101006F2
 S101006F   0.23    um^3    2   6   S101006F2
 S101006F   0.04    um^3    2   7   S101006F2
 S101006F   0.03    um^3    2   8   S101006F2
 S101006F   0.25    um^3    2   9   S101006F2
 S101006F   0.02    um^3    2   10  S101006F2
 S101006F   0.02    um^3    2   11  S101006F2

您的问题是您需要存储以后访问的方式,因为您一直在覆盖它们。虽然非常直观(尤其是当您有另一种语言的背景时),但大多数时候 for 循环并不是可行的方法。这是 base-R 中的一个可能的解决方案,使用 lapply.

首先,我们启动一个阈值向量:

my_thresholds <- seq(0,10,0.5)

然后我们使用lapply为每个阈值执行自定义函数:

res <- lapply(my_thresholds, function(x){
  #table by cell ID
  temp_table <- with(dat[dat$Volume>x,],table(Cell.ID))
  #return threshold used and mean of frequencies
  return(c(threshold=x,mean_freq=mean(temp_table)))
})

这可以绑定到正确的绘图格式:

res <- do.call(rbind,res)