我正在尝试编写一个函数并将其应用于列表。我的函数内部是由其他人编写的函数。如果我的列表很容易,一切都会正常工作。但是,如果我使用我拥有的所有真实数据,那么有一些不良对象,外部函数不起作用,我的整个函数都不会通过。
我输入什么来说“如果外部功能不起作用,请跳过该对象并移至列表中的下一个。”?无论是否有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))
答案 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
(或其他一些适当的值)。