如何将以下嵌套的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]), ]
}
}
答案 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
的所有唯一值,则不需要它。