Я уверен, что это довольно просто, но я бы хотел по-настоящему понять логику структур данных R здесь.
Если я подставляю матрицу по индексу за пределами границ, я получаю именно эту ошибку:
m <- matrix(data = c("foo", "bar"), nrow = 1)
m[2,]
# Error in m[2, ] : subscript out of bounds
Однако, если я делаю то же самое, делаю фрейм данных, я получаю все строки NA
:
df <- data.frame(foo = "foo", bar = "bar")
df[2,]
# foo bar
# NA <NA> <NA>
Если я помещаю в несуществующий столбец фрейма данных, я получаю знакомый
df[, 3]
# Error in '[.data.frame'(df, , 3) : undefined columns selected
Я знаю (примерно), что строки фрейма данных являются странными и требуют осторожного обращения, но я не совсем вижу связь с вышеуказанным поведением.
Может кто-нибудь объяснить, почему R ведет себя таким образом для несуществующих строк df?
Обновить
Надо отметить, что задание NA
для недопустимых подмножеств является нормальным поведением R для одномерных векторов:
vec <- c("foo", "bar")
vec[3]
# [1] NA
Таким образом, в некотором смысле странным здесь является подмножество матриц, а не подмножество фреймов данных, в зависимости от того, с чего вы начинаете. Тем не менее, другое поведение двумерного поднабора (m[2, ]
vs df[2, ]
) может показаться плотному пользователю (как я сейчас) непоследовательным.