如果我的函数对每个对象都不起作用,我该如何跳过这些对象?

时间:2017-07-21 19:35:53

标签: r dplyr

我正在尝试编写一个函数并将其应用于列表。我的函数内部是由其他人编写的函数。如果我的列表很容易,一切都会正常工作。但是,如果我使用我拥有的所有真实数据,那么有一些不良对象,外部函数不起作用,我的整个函数都不会通过。

我输入什么来说“如果外部功能不起作用,请跳过该对象并移至列表中的下一个。”?无论是否有NA,都无关紧要

我无法弄清楚如何编写一个可重现的例子,它会产生一个数据帧列表,这就是在这个函数中发生的事情。我愿意帮助改善这个问题。

我的功能是这样的:

do_this<- function(x){
  outside_function(x))%>%  #this returns a dataframe for each object
  filter()%>%
  select()%>%
  summarise_each(funs(mean(., na.rm = TRUE))) #by the end the df is down to one row
}

这是我将该函数应用于列表以提出最终数据帧的方法。

df<-bind_rows(lapply(my_list, do_this))

1 个答案:

答案 0 :(得分:0)

一个例子:

myfun <- function(x) {if (x == 1) {stop("bad")} else x}

输入1

时抛出错误
lapply(1:4, myfun)  # stops from error

只需将其包装在try中(只要您不需要更复杂的错误处理):

L <- lapply(1:4, function(x) try(myfun(x)))

然后你可以使用Filter摆脱“坏”的情况:

Filter(function(x) !inherits(x, "try-error"), L)

虽然你可能想让你的包装函数更健壮,或者在使内部函数失败的条件下返回NULL(或其他一些适当的值)。