在循环计数器 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)
我有一个大型数据框(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)