Я получаю предупреждение «более длинная длина объекта, не кратная более короткой длине объекта» в R при сравнении двух целых чисел для подмножества кадра данных посреди определяемой пользователем функции.
Пользовательская функция просто возвращает медиану подмножества целых чисел, взятых из кадра данных:
function(s){
return(median((subset(EDB,as.integer(validSession) == as.integer(s)))$absStudentDeviation))
}
(Изначально у меня не было приведений as.integer
. Я поместил их туда для отладки, текста, и все равно получаю сообщение об ошибке.)
Конкретная ошибка, которую я получаю:
В as.integer(validSession) == as.integer(s): более длинная длина объекта не кратна более короткой длине объекта
Я получаю это предупреждение более 50 раз при звонке:
mediandf <- ddply(mediandf,.(validSession),
transform,
grossMed2 = medianfuncEDB(as.integer(validSession)))
Цель состоит в том, чтобы вычислить медиану $validSession, связанную с данным validSession в EDB большого фрейма данных, и присоединить этот вектор к mediaandf.
На самом деле я дважды проверил, что все значения для validSession как в фрейме данных mediaandf, так и в фрейме данных EDB являются целыми числами, путем подмножества с is.integer(validSession)
.
Кроме того, похоже, что команда действительно делает то, что я намеревался, я получаю новый столбец в своем фрейме данных со значениями, которые я не проверял, но я хочу понять предупреждение. если «medianfuncEDB» вызывается с целым числом в качестве входных данных, почему я получаю «более длинная длина объекта не кратна более короткой длине объекта» при вызове s == validSession
?
Обратите внимание, что простые вызовы функций, такие как medianfuncEDB(5)
, работают без проблем, так почему же я получаю предупреждения при использовании ddply?
РЕДАКТИРОВАТЬ: я нашел проблему с помощью комментария Джорана. Я не знал, что преобразование загружает в функцию целые векторы. Вместо этого использование validSession[1] не дало никаких предупреждений.
as.integer
). Вы уверены, что validSession всегда будет иметь ту же длину, что и s? Может быть, вы хотели использовать%in%
, а не==
? - person joran   schedule 19.12.2011