2016-08-25 2 views
-1

Я пытаюсь сделать цикл for, который проходит через мой кадр данных и выполняет линейную регрессию всех столбцов против AcquisitionTime, которая является двойной. Все столбцы имеют одинаковую длину. В конце концов я хочу просто использовать одну из прикладных функций вместо цикла for, чтобы сделать это, но я действительно новичок в r, и функции apply не имеют для меня смысла.Как исправить «переменная длина отличается» Ошибка в r При выполнении линейной регрессии

##pdf("ROIs_vs_AcquisitionTime_lm.pdf") 
x = 0 
for (i in names(raw_data)){ 
    if(x > 9){ 
    fit <- lm(i ~ AcquisitionTimes, data = raw_data) 
    ##print(ggplotRegression(fit)) 
    } 
    x <- x + 1 
} 
##dev.off() 

Когда я запускаю этот код, я получаю эту ошибку:

Error in model.frame.default(formula = i ~ AcquisitionTimes, data = raw_data,: 
variable lengths differ (found for 'AcquisitionTimes') 

Что является причиной этой ошибки? Я проверил, есть ли у меня какие-либо другие фреймы данных с именем raw_data, но я этого не сделал. Я даже очистил объекты в R, чтобы узнать, поможет ли это. Всюду, где я читаю, говорится, что это происходит потому, что переменная AcquisitionTimes не существует в фрейме данных или потому, что в моих данных есть идентичные имена переменных. Пока я их не нашел.

+0

@ZheyuanLi Хорошо, я буду редактировать его. – Chriscross

+0

Awesome, thanks @Chriscross Мы действительно рекомендуем вам использовать 'dput()' для обмена данными вместо ссылок, но не беспокойтесь об этом на этот раз. –

+5

Одна проблема, которую я вижу, - это: lm (i ~ AcquisitionTimes, data = raw_data). Причина, по которой это не работает, состоит в том, что 'i' является строкой здесь, отличной от формата остальной части формулы. Вы можете исправить это, выполнив: 'lm (paste (i," ~ AcquisitionTimes "), data = raw_data)'. – jav

ответ

1

Я упомянул исправление уже мой комментарий, но следующий простой пример может воспроизвести вашу ошибку:

data(iris) 
i = "Sepal.Length" 
lm(i ~ Sepal.Width, data = iris) 

Вы увидите

Error in model.frame.default(formula = i ~ Sepal.Width, data = iris, drop.unused.levels = TRUE) : 
variable lengths differ (found for 'Sepal.Width') 

Чтобы исправить это, мы можем вместо этого сделать:

lm(paste(i , "~ Sepal.Width"), data = iris) 

который работает должным образом:

Call: 
lm(formula = paste(i, "~ Sepal.Width"), data = iris) 

Coefficients: 
(Intercept) Sepal.Width 
    6.5262  -0.2234 

В вашем случае, это будет

lm(paste(i, "~ AcquisitionTimes"), data = raw_data)