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

时间:2016-02-01 07:05:05

标签: r function loops subset

我有一个大型数据框(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逐步增加到。我认为(#seq(.5,10,.1)的输入会更好但是根本不起作用。我在下面的内容是最接近我的#ve来一些有效的东西,只有当音量截止值为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

1 个答案:

答案 0 :(得分:1)

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

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

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)