Это работает, если вы называете аргументы явно:
lapply(mylist, Filter, f = function(x) !all(is.na(x)) )
Где бы я узнал о таких деталях, как необходимость присвоения имени функции?Почему мне нужно называть функцию, когда она используется в качестве аргумента lapply (), а не в качестве аргумента для Filter ()?
Сравнение аргументов помогает:
> args(Filter)
function (f, x)
> args(lapply)
function (X, FUN, ...)
Читая ?lapply
, мы видим, что lapply(X, FUN, ...)
создает вызовы наподобие FUN(X[[i]], ...)
.Однако в Filter(f, x)
, x
не в первой позиции, поэтому мы должны назвать все аргументы, которые предшествуют этому.Когда мы делаем это, lapply
знает, как построить
Filter(mylist[[i]], f = function(x) !all(is.na(x)) )
, что эквивалентно
Filter(function(x) !all(is.na(x)), mylist[[i]])
Для получения подробных сведений о том, как считываются аргументы, часть «Именованные аргументы и значения по умолчанию»документы могут быть полезны, в RShowDoc("R-intro", type = "html")
.