my.data.frame <- subset(data , V1 > 2 | V2 < 4)
Альтернативное решение, имитирующее поведение этой функции и более подходящее для включения в тело функции:
new.data <- data[ which( data$V1 > 2 | data$V2 < 4) , ]
Некоторые люди критикуют использование which
как ненужное, но оно не позволяет значениям NA
отбрасывать нежелательные результаты. Эквивалент (т.е. не возвращающий NA-строки для каких-либо NA в V1 или V2) двум вариантам, показанным выше без which
, будет:
new.data <- data[ !is.na(data$V1 | data$V2) & ( data$V1 > 2 | data$V2 < 4) , ]
Примечание. Я хочу поблагодарить анонимного участника, который попытался исправить ошибку в приведенном выше коде, исправление, которое было отклонено модераторами. На самом деле была еще одна ошибка, которую я заметил, когда исправлял первую. Условное предложение, которое проверяет значения NA, должно быть первым, если оно должно обрабатываться, как я планировал, поскольку ...
> NA & 1
[1] NA
> 0 & NA
[1] FALSE
Порядок аргументов может иметь значение при использовании '& ".