R 如何使用lappy过滤器

R 如何使用lappy过滤器,r,function,lapply,R,Function,Lapply,我使用Filter()从数据帧中删除NAs列 Filter(function(x) !all(is.na(x)), df) 我有一个数据帧列表,其中包含我希望在其上运行此函数的NAs列。我不明白在lappy()中运行Filter()时如何将这些参数传递给Filter()。lapply文档只是说“…” 我最好的猜测是: > lapply(mylist, Filter, function(x) !all(is.na(x))) Error in get(as.character(FUN), m

我使用Filter()从数据帧中删除NAs列

Filter(function(x) !all(is.na(x)), df)
我有一个数据帧列表,其中包含我希望在其上运行此函数的NAs列。我不明白在lappy()中运行Filter()时如何将这些参数传递给Filter()。lapply文档只是说“…”

我最好的猜测是:

> lapply(mylist, Filter, function(x) !all(is.na(x)))
Error in get(as.character(FUN), mode = "function", envir = envir) :
  object 'f' of mode 'function' was not found

正确的方法是什么?

如果您明确地命名参数,它会起作用:

lapply(mylist, Filter, f = function(x) !all(is.na(x)) )
我在哪里可以了解函数命名等细节?为什么在用作lappy()的参数时需要命名函数,而在用作Filter()的参数时不需要命名函数

比较参数有助于:

> args(Filter)
function (f, x) 
> args(lapply)
function (X, FUN, ...) 
阅读
?lappy
,我们看到
lappy(X,FUN,…)
构建了类似
FUN(X[[i]],…)
的调用。但是,在
过滤器(f,x)
中,
x
不在第一位,因此我们必须命名它前面的所有参数。当我们这样做时,
lappy
知道如何构建

Filter(mylist[[i]], f = function(x) !all(is.na(x)) )
这相当于

Filter(function(x) !all(is.na(x)), mylist[[i]])

有关如何读取参数的详细信息,文档中的“命名参数和默认值”部分可能会有所帮助,在
RShowDoc(“R-intro”,type=“html”)

您需要命名参数,我想,
lappy(mylist,Filter,f=function(x)!all(is.na(x))
谢谢!这非常有效。如果你把这个作为答案,我会接受的。我在哪里可以了解函数命名等细节?为什么在用作lappy()的参数时需要命名函数,而在用作Filter()的参数时不需要命名函数?