Так что lapply
не используется здесь, вот и все!
lapply
применяет функцию к каждому элементу списка. Чтобы быть явным, он берет каждый элемент списка и применяет функцию к этому элементу.
Таким образом, если вы хотите применить функцию к нескольким подмножествам фрейма данных, вам нужно получить список, который представляет собой несколько подмножеств фрейма данных. Итак, давайте сначала создадим этот список.
Мы можем сделать это, используя функцию разделения, она разбивает ваш фрейм данных на несколько фреймов данных на основе столбца и сохраняет их в виде списка. Список подмножеств фрейма данных. Отлично!
Итак, давайте заменим строку, в которой вы создаете mylist
, этой строкой.
mylist <- split(df,df[,c("Item")])
Теперь нам просто нужно внести некоторые изменения в myfunction
. Помните, что мы сейчас передаем наши данные, уже поднастроенные, поэтому мы можем убрать условия о Item
совпадении с тем, что мы ожидаем. Помните, что эта функция будет применена к каждому из этих фреймов данных в полном объеме.
myfunction <- function(df = df, diff = numeric()) {
y = df[df$Date == last(df$Date), "Value"] # Latest value for an item
x = df[, "Value"] # Every value for an item
diff <- c(diff, y-x)
}
А остальное, друг мой, именно такой, как у тебя:)