Я получаю предупреждение «длиннее объекта, не кратное более короткому объекту» в R при сравнении двух целых чисел, чтобы подмножество DataFrame в в середине пользовательской функции.сравнение двух целых чисел в R: «длина длинного объекта не кратная длины объекта меньше» ddply
Определенная функция пользователя просто возвращает медиану подмножества целых чисел, взятое из dataframe:.
function(s){
return(median((subset(EDB,as.integer(validSession) == as.integer(s)))$absStudentDeviation))
}
(я изначально не был as.integer
принуждения в там я их там отлаживать, текст, . и я все еще получаю сообщение об ошибке)
Специфическая ошибка я получаю:
В as.integer (validSession) == as.integer (ы): л onger длина объекта не кратна длине короче объекта
Я получаю это предупреждение свыше 50 раз при вызове:
mediandf <- ddply(mediandf,.(validSession),
transform,
grossMed2 = medianfuncEDB(as.integer(validSession)))
Цель состоит в том, чтобы вычислить медиану $ validSession, связанного с данным validSession в большой блок данных EDB и привязать этот вектор к медиане.
Я фактически дважды проверял, что все значения для validSession как в фрейме данных mediandf, так и в блоке данных EDB являются целыми числами с помощью подмножества с is.integer(validSession)
.
Кроме того, похоже, что команда на самом деле выполняет то, что я намереваюсь, я получаю новый столбец в своем фреймворке данных со значениями, которые я не проверял, но я хочу понять это предупреждение. если «medianfuncEDB» вызывается с целым числом в качестве его ввода, почему я получаю «длинную длину объекта не кратно меньшей длины объекта», когда вызывается s == validSession
?
Обратите внимание, что простые вызовы функций, такие как medianfuncEDB(5)
, работают без проблем, так почему я получаю предупреждения при использовании ddply?
EDIT: Я нашел проблему с помощью комментария Джорана. Я не знал, что преобразование передало целые векоторы в функцию. Использование validSession [1] вместо этого не выдавало никаких предупреждений.
Можете ли вы предоставить некоторые данные образца? – Chase
Я комментирую, а не отвечаю, так как это будет трудно решить без воспроизводимого примера. Однако это вряд ли будет связано с принуждением ('as.integer').Вы уверены, что validSession всегда будет такой же длины, как и s? Возможно, вы хотели использовать '% in %', а не' == '? – joran
Если вы используете инструменты отладки (http://stackoverflow.com/questions/1882734/what-is-your-favorite-r-debugging-trick/5156351#5156351), вы сможете сравнить то, что считаете ваши данные похоже на то, что он на самом деле делает. В частности, попробуйте установить параметры (ошибка = восстановить). –