我有一个数据集,我希望通过某些条件将其作为TRT进行子集化,然后在每个条件上评估一些函数,但不是为每个子集重复函数而是为了执行for循环。问题是我想得到结果,但是上面有子集的名称,我不能这样做
这是我的脚本和结果:
df_list <- split(dataet,(dataet$TRT))
> for (i in df_list){
+ a <- c(shapiro.test(i$FV0)$p.value)
+ print(a)
+ }
[1] 0.07373223
[1] 0.2995577
[1] 0.003565924
[1] 0.005733235
[1] 0.02378732
[1] 0.01615178
[1] 0.09363349
[1] 0.8619091
上面的问题是结果还可以,但是我无法获得那些分开的值。然后我试图用向量(a)粘贴df_list的名字,但我得到了最后的结果:
> paste(names(df_list),a)
[1] "27D 0.861909062310829" "27S 0.861909062310829"
[3] "34D 0.861909062310829" "34S 0.861909062310829"
[5] "38D 0.861909062310829" "38S 0.861909062310829"
[7] "45D 0.861909062310829" "45S 0.861909062310829"
这是我数据框的一部分:
> head(dataet)
ID sp IND POS Temp TRT FV0 FVf Prop
1 1 DIPOLE A D 27C 27D 0.833 0.664 0.2028812
2 2 DIPOLE A D 27C 27D 0.843 0.622 0.2621590
3 3 DIPOLE A D 27C 27D 0.843 0.525 0.3772242
4 4 DIPOLE A D 27C 27D 0.813 0.601 0.2607626
5 5 DIPOLE A D 27C 27D 0.810 0.592 0.2691358
6 6 DIPOLE A D 27C 27D 0.845 0.663 0.2153846
> tail(dataet)
ID sp IND POS Temp TRT FV0 FVf Prop
235 285 DIPOLE C S 45C 45S 0.764 0.383 0.4986911
236 286 DIPOLE C S 45C 45S 0.772 0.411 0.4676166
237 287 DIPOLE C S 45C 45S 0.748 0.073 0.9024064
238 288 DIPOLE C S 45C 45S 0.757 0.125 0.8348745
239 289 DIPOLE C S 45C 45S 0.773 0.086 0.8887451
240 290 DIPOLE C S 45C 45S 0.772 0.188 0.7564767
答案 0 :(得分:0)
尝试类似:
df_list <- split(dataet,(dataet$TRT))
res <- list()
for (i in seq_along(df_list)) {
res[[i]] <- c( names(df_list[i],
shapiro.test(df_list[[i]]$FV0)$p.value
)
}
res
使用循环不是一种高效的方法,但我猜你的任务是适度的。如果您需要更高的效率,可以预先分配res<-vector('list', length=length(df_list) )
。