Разница между радужной оболочкой и чашелистиком.Ширина и «Чашелистик.Ширина» в []

#r

#r

Вопрос:

 subset(iris, Sepal.Width  > 4 amp; Sepal.Length > 5, select = c(Sepal.Width,Sepal.Length,Species))
 

Я проверял функцию подмножества, но подумал, что то же самое можно сделать проще, так зачем запоминать новую функцию.

Итак, я написал приведенный ниже код для репликации вышеупомянутой функции подмножества

1)

  iris["Sepal.Width" > 4 amp; "Sepal.Length" > 5,c("Sepal.Width", "Sepal.Length","Species")]
 

Но условие amp; здесь не работает, и когда я проверил приведенный ниже код, и он сработал

2)

  iris[iris$Sepal.Width > 4 amp; iris$Sepal.Length > 5,c("Sepal.Width", "Sepal.Length","Species")]
 

Пожалуйста, объясните

  • Поскольку код 1) и 2) отличается, я ожидал, что оба 1) и 2) дадут одинаковый результат.
  • Поскольку у нас есть код 2) почему мы должны использовать функцию подмножества? Любой
    сценарий, в котором функция подмножества лучше?

Спасибо

Комментарии:

1. Этот вопрос касается программирования на языке R и помечен для перехода на переполнение стека.

Ответ №1:

Это потому, что вы сравниваете строку Sepal.Width с числом 4 , а не со значениями одноименного столбца. Так что они всегда будут TRUE :

 > "Sepal.Width" > 4
[1] TRUE

> "Sepal.Length" > 5
[1] TRUE
 

Итак, вы для iris[TRUE, c("Sepal.Width", "Sepal.Length","Species")] which возвращает все строки для выбранных столбцов. Я лично предпочитаю использовать subset .

Комментарии:

1. Спасибо! Можете ли вы объяснить, почему подмножество лучше?

2. В основном для удобства чтения, но также и для согласованности, поскольку subset может работать с несколькими различными форматами данных (data.frame, matrix, list и т. Д.).