2015-12-03 5 views
2

Я работал над файловой рамкой с 8 строками и 5 столбцами. Я хотел напечатать только последние 3 строки.R-использование скобок в dataframes

я изначально писал:

last_3 <- my_df[ nrow(my_df) - 2 : nrow(my_df),] 
last_3 

Это печатное первые 6 строк из строк номер 6 к строке номер 1 (т.е. в порядке убывания)

Тогда я сделал это, и она работала, как и ожидалось (т.е. номера строк 6,7 и 8)

last_3 <- my_df[(nrow(my_df) - 2) : nrow(my_df),] 
last_3 

Может ли кто-нибудь объяснить, какие изменения принесли скобки? И как был создан вывод в первом случае.

ответ

2

Это можно объяснить, заметив, что оператор толстой кишки : имеет более высокую порядок приоритета, чем минус - оператора. Вот пример, который показывает, что происходит, если предположить, что данные кадра my_df 4 строки:

my_df <- data.frame(v1=c(1,2,3,4), v2=c(1,2,3,4), v3=c(1,2,3,4)) 

nrow(my_df) - 2 : nrow(my_df) 

4 - (2 : 4) 
4 - [2, 3, 4] 
[2, 1, 0] 

Другими словами, вы действительно добавляющие номер последовательности 2:4. Когда вы завернули индексы в круглые скобки, вы получили такое поведение, которое вам действительно хотелось:

(nrow(my_df) - 2) : nrow(my_df) 

(4 - 2) : 4 
2 : 4 
[2, 3, 4] 
Смежные вопросы