Где может я находить информацию о различиях между обращением к столбцу в data.frame через:
df <- data.frame(x=1:20,y=letters[1:20],z=20:1)
df$x
df["x"]
Они оба возвращают "те же" результаты, но не обязательно в том же формате. Другая вещь, которую я заметил, состоит в том, что df$x возвращает список. Принимая во внимание, что df ["x"] возвращает data.frame.
Править: Однако зная, который использовать, в котором ситуация стала проблемой. Существует ли лучшая практика здесь, или она действительно сводится к знанию, чего требуют команда или функция? До сих пор я просто циклически повторялся через них, если моя функция не работает в первом (метод проб и ошибок).
Если я не ошибаюсь, df $ x
совпадает с df [[' х ']]
. [[
] используется для выбора любого отдельного элемента, тогда как [
возвращает список выбранных элементов. См. Также справочник по языку . Я обычно вижу, что [[используется для списков, [для массивов и $ для получения одного столбца или элемента. Если вам нужно выражение (например, df [[имя]] или df [, имя]), используйте также обозначение [или [[. Обозначение [также используется, если выбрано несколько столбцов. Например, df [, c ('name1', 'name2')]. Я не думаю, что для этого есть лучшие практики.
df $ x
и df [[x]]
do тоже самое.
Предположим, у вас есть набор данных с именем один
. Одна из этих переменных - факторная переменная, Регион
. Использование one $ Region
позволит вам выбрать конкретную переменную. Примите во внимание следующее:
one <- read.csv("IED.csv")
one$Region
Выполнение следующего кода также позволяет изолировать эту переменную / уровень.
one[["Region"]]
Каждый код дает следующий результат:
> one$Region
[1] RC SOUTH RC SOUTH RC SOUTH RC EAST RC EAST
[6] RC EAST RC EAST RC EAST RC EAST RC EAST
[11] RC SOUTH RC SOUTH RC EAST RC EAST RC EAST
[16] RC EAST RC EAST RC SOUTH RC SOUTH RC EAST
[21] RC SOUTH RC EAST RC CAPITAL RC EAST RC EAST
> one[["Region"]]
[1] RC SOUTH RC SOUTH RC SOUTH RC EAST RC EAST
[6] RC EAST RC EAST RC EAST RC EAST RC EAST
[11] RC SOUTH RC SOUTH RC EAST RC EAST RC EAST
[16] RC EAST RC EAST RC SOUTH RC SOUTH RC EAST
[21] RC SOUTH RC EAST RC CAPITAL RC EAST RC EAST
«Они оба возвращают« одинаковые »результаты, но не обязательно в одном и том же формате». - Никаких отличий не заметил. Каждая команда произвела одинаковые выходные данные в одном и том же формате. Возможно, это ваши данные.
Надеюсь, что это поможет.
РЕДАКТИРОВАТЬ:
Неправильно прочитали исходный вопрос. df ["x"]
дает следующее:
> one["Region"]
Region
1 RC SOUTH
2 RC SOUTH
3 RC SOUTH
4 RC EAST
5 RC EAST
6 RC EAST
7 RC EAST
8 RC EAST
9 RC EAST
10 RC EAST
Не уверен, почему возникает разница.
Другое отличие состоит в том, что df $ w
возвращает NULL
и df ['w']
или df [['w']]
выдает ошибку с вашим примером фрейма данных.
В дополнение к странице индексирования в руководстве вы можете найти это краткое описание на странице справки? "$":
Индексирование с помощью ‘[’ аналогично атомарному векторов и выбирает список указанный элемент (ы).
Оба ‘[[’ и ‘$’ выбирают один элемент списка. Главный разница в том, что "$" не позволяет вычислял индексы, тогда как "[[" делает. ‘X $ name’ эквивалентно ‘x [[" name ", точное = FALSE]] ’. Также частичный поведение соответствия «[[» может быть контролируется с помощью «точного» аргумента.
Вызов функций, конечно, разные. См. get ("[. Data.frame")
по сравнению с get ("[[. Data.frame")
по сравнению с get ("$")
Если вы используете df [, "x"] вместо df ["x"], вы получите тот же результат, что и df $ x. Запятая означает, что вы выбираете столбец по имени.