#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, и наоборот, или результаты могут быть искажены. Разумно?