【问题标题】:Applying non interger values in loop counter and/or subset function, R在循环计数器和/或子集函数中应用非整数值,R
【发布时间】:2016-02-01 07:05:04
【问题描述】:

我有一个大型数据框(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.1 的步长从 0.5 到 10。我认为“for (i in seq(.5,10,.1) 的输入会更好,但这根本不起作用。我下面的内容是我最接近可行的东西,它仅在音量截止值为 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

【问题讨论】:

    标签: r function loops subset


    【解决方案1】:

    您的问题是您需要存储以后访问的方法,因为您一直在覆盖它们。虽然非常直观(尤其是当您有另一种语言的背景时),但大多数情况下 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)
    

    【讨论】:

      猜你喜欢
      • 2015-05-29
      • 2021-09-04
      • 2021-12-17
      • 1970-01-01
      • 2023-03-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多