Почему я могу использовать 3 измерения для подмножества кадра данных в R? - PullRequest
1 голос
/ 29 февраля 2020

Недавно я изучаю данные R. Вы знаете, что мы можем подмножество data.frame для R, как показано ниже:

foo  <- data.frame(mpg[1:5, ])
foo[1:2,3:4]
>#       displ  year
>#  1      1.8  1999
>#  2      1.8  1999

Но мне довелось добавить третье измерение в [], как в приведенном ниже коде, и извинить его,

foo[1:2, 3:4, 5]
>#       displ  year
>#  1      1.8  1999
>#  2      1.8  1999

Я думал, что это будет исключение. Однако все идет хорошо.

В моем понимании data.frame R - это своего рода двумерная таблица. Так почему я могу использовать 3 измерения для подмножества данных в R? Что случилось за этим кодом? Каков основной принцип?
И когда я попытался установить подкадр данных, использовать 4-е измерение или более как foo[1:2, 3:4, 5, 6], на этот раз появится сообщение Error in [.data.frame (foo, 1:2, 3:4, 5, 6): unused argument (6). Я сейчас совершенно сбит с толку.

Любая помощь приветствуется, оцените ее.

1 Ответ

2 голосов
/ 29 февраля 2020

При отправке data.frame S3 означает, что вы используете [.data.frame; вы можете увидеть его аргументы с помощью formals или args:

args(`[.data.frame`)
# function (x, i, j, drop = if (missing(i)) TRUE else length(cols) == 1) 

formals(`[.data.frame`)
# $x
# $i
# $j
# $drop
# if (missing(i)) TRUE else length(cols) == 1

Вы можете проконсультироваться с ?"[.data.frame" для более подробной информации о значении этих аргументов.

Что касается того, почему это не так не ошибитесь, скорее всего, из-за ленивой оценки; Вы можете проверить книгу Хэдли или просто поискать «ленивая оценка R», чтобы найти дополнительные ресурсы

...