如何转换For循环以应用

时间:2012-11-01 19:51:10

标签: r

如何将以下嵌套的For循环转换为Apply?

for(i in 1:length(vList$Subgroup.Number))
{
  for(j in 1:length(viol_grp))
   {
    viol_List[[j]] <- vList[which(vList$Subgroup.Number==viol_grp[j]), ]
   }
}

2 个答案:

答案 0 :(得分:2)

根本不需要第一个循环。在第一个循环的主体中没有变量i,因此您多次执行相同的任务。

要更改第二个循环,您可以按照以下方式操作(感谢flodel评论):

viol_list = lapply(viol_grp, function(x) vList[vList$Subgroup.Number==x,])

答案 1 :(得分:1)

我想你想要做的是将vList拆分成单独的数据框,基于他们的Subgroup.Number。这样做非常干净:

viol_list<-split(vList,vList$Subgroup.Number)

但如果您真的只想要viol_grp中的群组,则必须使用子集:

split(vList,vList$Subgroup.Number)[as.character(viol_grp)]

但是,如果viol_grp只是vList$Subgroup.Number的所有唯一值,则不需要它。