Вопрос или проблема
Я написал функцию, которая возвращает мне список, содержащий число (odchylka.sr) и объект ggplot (ggpl)
model.ARIMA.RF.fct <- function (l.obs.pomin) {
...
wynik.lst <- list (odchylka.sr, ggpl)
return(wynik.lst)
}
Я сохраняю результаты в датафрейме согласно
ARIMA.RF.cwu.wyniki <- data.frame(
l.obs.pomin = c(52, 69, 136, 217)
) %>%
mutate(
out = pmap(list (l.obs.pomin), model.ARIMA.RF.fct)
)
Я получаю
Я хочу, чтобы odchylka.sr была отдельным столбцом перед столбцом ‘out’.
Я не могу справиться с этой задачей.
Я использую pmap, потому что моя целевая функция имеет 3 аргумента
function_that_returns_lists <- function(x){
list(thing_1 = x+1,
thing_2 = x^2)
}
df1 <- data.frame(
l.obs.pomin = c(52, 69, 136, 217)
) %>%
mutate(
out = pmap_df(list (l.obs.pomin), function_that_returns_lists) # pmap_df, чтобы out был более удобно структурирован
) |> unnest(out) # легко отделить по его столбцам в набор данных
Ответ или решение
Для решения вашей задачи, вы можете использовать функцию pmap_df
вместе с функцией unnest
из пакета tidyr
, что позволит вам выделить каждый элемент списка, возвращаемого вашей функцией, в отдельные столбцы в вашем датафрейме. Таким образом, вы сможете выделить значения odchylka.sr
(предположительно название переменной в вашей функции) в отдельный столбец перед столбцом ‘out’.
Вот пример кода, который иллюстрирует это:
library(dplyr)
library(purrr)
library(tidyr)
# Предположим, что ваша функция model.ARIMA.RF.fct выглядит так:
model.ARIMA.RF.fct <- function(l.obs.pomin) {
# Здесь вы выполняете расчеты и создаете ggplot
odchylka.sr <- l.obs.pomin + rnorm(1) # пример вычислений
ggpl <- ggplot(data.frame(x = 1:10, y = rnorm(10)), aes(x = x, y = y)) + geom_line() # пример графика
wynik.lst <- list(odchylka.sr = odchylka.sr, ggpl = ggpl)
return(wynik.lst)
}
# Создание датафрейма и использование pmap_df для получения результатов
ARIMA.RF.cwu.wyniki <- data.frame(
l.obs.pomin = c(52, 69, 136, 217)
) %>%
mutate(
out = pmap(list(l.obs.pomin), model.ARIMA.RF.fct)
) %>%
unnest_wider(out) # Разделяем список на отдельные столбцы
# Переименование столбцов для удобства
colnames(ARIMA.RF.cwu.wyniki) <- c("l.obs.pomin", "odchylka.sr", "ggpl")
# Теперь у вас есть odchylka.sr в отдельном столбце перед 'out'
print(ARIMA.RF.cwu.wyniki)
В этом примере:
- Функция
model.ARIMA.RF.fct
возвращает список, содержащийodchylka.sr
и ggplot объект. - Мы используем
pmap
для применения функции к векторуl.obs.pomin
, и сохраняем результат в столбецout
. - С помощью
unnest_wider()
мы извлекаем каждый элемент списка (odchylka.sr
и ggplot) в отдельные столбцы. - После этого вы можете переименовать столбцы для удобства.
Важно отметить, что ggplot объект не может быть отображён в датафрейме, но при необходимости, его можно сохранить отдельно или визуализировать корректно после обработки данных.
Если у вас возникнут дополнительные вопросы или потребуется больше уточнений, не стесняйтесь спрашивать!