Что происходит во время присвоения фрейма данных с помощью lapply

#r #dataframe #lapply

Вопрос:

Учитывая фрейм данных df и функцию f, которая применяется к df:

df[]

Какую магию выполняет R для замены столбцов в df набором векторов в списке из lapply? Я вижу, что результатом lapply является список векторов, имеющих те же имена, что и фрейм данных df. Я предполагаю, что какое-то волшебное отображение выполняется для сопоставления векторов с df [], который представляет собой набор столбцов в df (по-моему). Просто работает? Пытаюсь лучше понять, чтобы запомнить, что использовать в следующий раз.

Ответ №1:

Фрейм данных-это просто список векторов одинаковой длины. Вы можете увидеть это с помощью is.list(a_data_frame) . Оно вернется TRUE .

[] может иметь разное значение или действие в зависимости от объекта, к которому оно применяется. Его даже можно переопределить, поскольку на самом деле это функция.

[] позволяет подмножествовать или вставлять векторные столбцы из data.frame.

df[1] получить первый столбец df[1] <- 2 заменить первый столбец на 2 (повторяется, чтобы иметь ту же длину, что и другие столбцы)

df[] возвращает все данные.фрейм df[] <- list(c1,c2,c3) задает содержимое данных.фрейм заменяет его текущее содержимое

Плюс множество других способов доступа или установки данных в data.frame (по имени столбца, по подмножеству строк, столбцов, …)

Комментарии:

1. «df [] — это весь фрейм данных», я думаю, что это ключ для меня. Список, возвращаемый из lapply, имеет ту же форму, что и фрейм данных, к которому применяется функция. Поскольку (в данном случае) получателем результата является весь фрейм данных, и функция также применяется ко всему фрейму данных, то все получается хорошо. Если целью было подмножество, например, df[1:5], то то же самое подмножество должно появиться в операторе lapply, и наоборот, или результаты могут быть искажены. Разумно?