Почему я получаю «предупреждение, что длинная длина объекта не кратная короткой длине объекта»?
У меня есть 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
Зачем?
- Удалите несколько объектов с помощью rm ()
- Есть ли такой «colsd» в R?
- Какая польза от этого?
- Печать новых строк с помощью print () в R
- Извлечение строк для первого вхождения переменной в фрейм данных
- R: t-тест по всем столбцам
- cbind a df с пустым df (cbind.fill?)
- Программируемая версия подмножества - для оценки ее состояния при вызове из другой функции
- Вычисление суммарной суммы для каждой строки
- Импорт текстового файла в виде отдельной символьной строки
- Преобразование серийного номера excel DateTime в R DateTime
- Преобразование десятичного в двоичный в R?
- Найти повторяющиеся значения в R
Вы не приводите воспроизводимый пример, но ваше предупреждающее сообщение сообщает вам, в чем проблема.
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