Название самообучающееся. Хотелось бы знать, почему R выбрала переработку логических значений для выбора/подмножества? Документация "["
утверждает Such vectors are recycled if necessary to match the corresponding extent. i, j
R-обоснование для переработки булевых индексов для выбора
Существуют ли какие-либо преимущества делают это? Я мог бы подумать об одном, как указано ниже, но я думаю, что недостатки могут перевесить преимущества простоты использования.
df<- data.frame(C1=1:10,c2=101:110)
class(unclass(df)[1]) # df is a list of two lists, each a column of df
df
df[1] # selects 1st list (ie, first column)
df[2]
# However, indices are recycled if we use Logical indices
df[TRUE] # selects both columns
df[c(T,T),] # recycled row indices
df[c(T,T,F),] # recycled row indices
df[FALSE]
# This can actually lead to inadvertent errors
# For example, this has only 7 index elements instead of 10,
# but it's quite possible to miss out on the fact that these are being recycled
df[c(T,F,T,T,F,F,F),]
Единственное использование этой функции рециркуляции, что я мог думать только о том, в skipping alternate rows
df[c(T,F),]
Контекст задает этот вопрос является еще один я видел на SO вчера. Позднее он был удален, поскольку кто-то указал разницу между |
и ||
. Интересно, поняли ли они, что они также занимаются переработкой здесь.
# An erronous use of && can land you in soup too
df [df$C1 >0 && df$c2 <102, ] #returns TRUE, will select all rows
Существуют ли какие-либо другие хорошо известные подводные камни такого рода, что один должен быть осторожны?
О, спасибо, что ответили на этот вопрос. Да, конечно, я хорошо понял проблему с &&. Я просто комментировал, почему один индекс значения возвратил весь столбец. И, конечно же, я также осознал удобство использования утилизации. Undisputed. Тем не менее, это просто заставило меня задуматься, может ли я в какой-то момент сделать ошибку с индексированием и не осознал этого из-за утилизации. Последняя часть ответа действительно поражает меня. Кажется, это разветвление того, как «традиция», или, скорее, эволюционные корни, формовали язык. –
Тот факт, что NA в качестве индекса матрицы данных возвращает строку (или столбец) NA, является тем, что меня заводит. –
Да, другая логическая константа. И вы тоже можете его переработать. 'Some.matrix [Н. А., Н. А.]' –