У меня есть список данных фреймовlapply функции при изменении значения аргумента для каждого элемента списка
listofdf <- list(a = a, b = b, c = c)
У меня есть функция:
remove_outliers <- function(x, ll, ul) {
require(dplyr)
x <- x %>% filter(SALES < quantile(SALES, probs = c(ll)) & SALES > quantile(SALES, probs = c(ul)))
return(x)
}
Я хочу, чтобы применить эту функцию в списке , Условие состоит в том, что значение аргументов ul
и ll
в изменении функции для каждого элемента списка.
Я не могу написать:lapply(listofdf, remove_outliers, 0.01, 0.99)
, потому что 0,01 & 0,99 изменяются в зависимости от ФР.
У меня есть подозрение, что это может быть решена с помощью Map
или mapply
поэтому я попытался это:
listofdf <- Map(remove_outliers, listofdf, MoreArgs = list(ll = c(0.1, 0.2, 0.3), ul = c(0.90, 0.95, 0.99)))
, но я получил ошибки:
Warning messages:
1: In filter_impl(.data, dots) :
longer object length is not a multiple of shorter object length
2: In filter_impl(.data, dots) :
longer object length is not a multiple of shorter object length
3: In filter_impl(.data, dots) :
longer object length is not a multiple of shorter object length
4: In filter_impl(.data, dots) :
longer object length is not a multiple of shorter object length
Не используйте 'MoreArgs' в' Map'. Просто попробуйте «Карта (remove_outliers, listofdf, c (0.1, 0.2, 0.3), c (0.90, 0.95, 0.99))' – nicola
возвращает пустой список! ** царапины головы ** – vagabond
после 2 часов борьбы, я понимаю, что я менял значения аргументов в функции, когда я использовал карту, которая привела к набору данных NULL. Короче говоря, я писал: «Map (remove_outliers, listofdf, c (0.9, 0.95, 0.98)», c (0.1, 0.2, 0.3)) »и, очевидно, ни одна строка в моих данных не соответствовала этому условию! – vagabond