处理R中的重复任务

ATM*_*hew 17 for-loop r dataframe

我经常发现自己不得不在R中执行重复性任务.不得不一遍又一遍地在一个或多个数据结构上运行相同的函数,这非常令人沮丧.

例如,假设我在R中有三个独立的数据帧,我想删除每个具有缺失值的数据帧中的行.对于三个数据帧,在每个df上运行na.omit()并不是那么困难,但是如果有一百个类似的数据结构需要相同的动作,它就会变得非常低效.

df1 <- data.frame(Region=c("Asia","Africa","Europe","N.America","S.America",NA),
             variable=c(2004,2004,2004,2004,2004,2004), value=c(35,20,20,50,30,NA))

df2 <- data.frame(Region=c("Asia","Africa","Europe","N.America","S.America",NA),
            variable=c(2005,2005,2005,2005,2005,2005), value=c(55,350,40,90,99,NA))

df3 <- data.frame(Region=c("Asia","Africa","Europe","N.America","S.America",NA),
           variable=c(2006,2006,2006,2006,2006,2006), value=c(300,200,200,500,300,NA))

tot04 <- na.omit(df1)
tot05 <- na.omit(df2)
tot06 <- na.omit(df3)
Run Code Online (Sandbox Code Playgroud)

处理R中重复性任务的一般指导原则是什么?

是的,我认识到这个问题的答案是针对一个人面临的任务,但我只是询问用户在有重复性任务时应该考虑的一般事项.

Hon*_*Ooi 20

作为一般准则,如果要将多个对象应用于相同的操作,则应将它们收集到一个数据结构中.然后你可以使用循环,[sl] apply等来一次完成操作.在这种情况下,而不是单独的数据帧df1,df2等等,你可以把它们放到数据帧的列表,然后运行na.omit于所有的人:

dflist <- list(df1, df2, <...>)
dflist <- lapply(dflist, na.omit)
Run Code Online (Sandbox Code Playgroud)

  • @Richie:不,谢谢.我知道tryCatch(虽然我应该查看它是否涉及像大多数语言一样的性能损失).没错:它会缓解我的担忧.尽管如此,这种工作方式使我无法在所有结果完成之前查看部分结果.请注意,我高度重视@ Hong的建议,但我一直在"该死的,我开始了很多事情,我想知道它到目前为止做了什么"主席曾经常常自己:-). (2认同)