Почему я получаю «предупреждение, что длинная длина объекта не кратная короткой длине объекта»?

У меня есть dataframe dih_y2. Эти две строки дают мне предупреждение:

> memb = dih_y2$MemberID[1:10] > dih_col = which(dih_y2$MemberID == memb) Warning message: In dih_y2$MemberID == memb : longer object length is not a multiple of shorter object length 

Зачем?

Вы не приводите воспроизводимый пример, но ваше предупреждающее сообщение сообщает вам, в чем проблема.

memb только имеет длину 10. Я предполагаю, что длина dih_y2 $ MemberID не кратная 10. При использовании == оно выплюнет предупреждение, если оно не будет кратным, чтобы вы знали, что это, вероятно, не делая того, чего вы ожидаете от этого. == выполняет элементную проверку равенства. Я подозреваю, что вы хотите сделать, если найти, какой из элементов dih_y2$MemeberID также находится в векторе memb . Для этого вы хотите использовать оператор %in% .

 dih_col <- which(dih_y2$MemeberID %in% memb) 

Когда вы выполняете логическое сравнение между двумя векторами в R, «ожидание» состоит в том, что оба вектора имеют одинаковую длину, так что R может поочередно сравнивать каждый соответствующий элемент.

R имеет очень любимую (или ненавистную) функцию, называемую рециркуляцией , при которой во многих случаях, если вы пытаетесь сделать что-то, где R обычно ожидает, что объекты имеют одинаковую длину, он автоматически расширяет или перерабатывает более короткий объект, чтобы заставить как объекты имеют одинаковую длину.

Если более длинный объект кратен короче, это означает просто повторение более короткого объекта несколько раз. Зачастую программисты R будут использовать это, чтобы делать вещи более компактно и с меньшим набором текста.

Но если они не являются кратными, R будет беспокоиться о том, что вы, возможно, допустили ошибку, и, возможно, не хотели выполнять это сравнение, следовательно, предупреждение.

Изучите следующий код:

 > x <- 1:3 > y <- c(1,2,4) > x == y [1] TRUE TRUE FALSE > y1 <- c(y,y) > x == y1 [1] TRUE TRUE FALSE TRUE TRUE FALSE > y2 <- c(y,2) > x == y2 [1] TRUE TRUE FALSE FALSE Warning message: In x == y2 : longer object length is not a multiple of shorter object length 
  • Как суммировать числовые элементы списка
  • Перечислить списки в R
  • Отбор проб в R из вектора различной длины
  • Создание системы Prompt / Answer для ввода данных в R
  • Евклидово расстояние двух векторов
  • Использование gsub для извлечения символьной строки перед пробелом в R
  • В R, как получить имя объекта после его отправки в функцию?
  • Получить «встроенные nul (s), найденные во вводе» при чтении csv, используя read.csv ()
  • Ускорение производительности write.table
  • Среднее значение для каждого элемента списка матриц
  • Преобразовать значения в столбце в имена строк в существующем кадре данных в R
  • Давайте будем гением компьютера.