Почему выходные данные отличаются для функции «с» в r?

#r

Вопрос:

Когда я набираю этот код: with(my.data, order(age)) я получаю следующий вывод: 2 3 5 1 4 но когда я набираю этот код: my.data[order(my.data$age),] я получаю следующий вывод:

   name age hgt  wgt  race year  SAT
2 Fred  18  67  156 Af.Am   Fr 1210
3 Barb  18  64  128  <NA>   Fr  840
5 Jeff  20  72  202 Asian   So  880
1  Bob  21  70  180  Cauc   Jr 1080
4  Sue  24  66 1118  Cauc   Sr   NA
 

Я хочу показать приведенный выше вывод с помощью функции «с», но она дает мне только первую строку, а не всю матрицу.

Ответ №1:

with используется для удобства, т. е. чтобы избежать набора my.data$ текста или my.data[[ многократного ввода

 with(my.data, order(age))
 

эквивалентно

 order(my.data$age)
 

with в основном полезно, когда мы делаем что-то вроде

 with(my.data, order(name, age, hgt))
 

Эквивалент будет my.data$ повторен три раза

 order(my.data$name, my.data$age, my.data$hgt)
 

Все вышеперечисленное возвращает order индекс на основе, который мы используем в качестве индекса строки в [ ( ?Extract )


Если мы хотим вернуть данные, почему бы не использовать arrange

 library(dplyr)
my.data %>%
     arrange(age)
 

Ответ №2:

Если вы хотите получить этот вывод, вам нужно использовать [] его в инструкции.

 with(my.data, my.data[order(age), ])
 

Выходные данные (только примеры данных с несколькими столбцами)

   name age hgt
2 Fred  18  67
3 Barb  18  64
5 Jeff  20  72
1  Bob  21  70
4  Sue  24  66
 

Примерные Данные

 my.data <-
  structure(list(
    name = c("Bob", "Fred", "Barb", "Sue", "Jeff"),
    age = c(21, 18, 18, 24, 20),
    hgt = c(70, 67, 64, 66, 72)
  ),
  class = "data.frame",
  row.names = c(NA,
                -5L))