используя paste() в цикле for с glm

В приведенном ниже коде df.pts — это кадр данных. Я хотел бы запустить около дюжины моделей glm, используя разные переменные y (в коде показаны только две). Я использую цикл for с функцией paste(), но не могу заставить функцию paste() работать должным образом. Что мне не хватает в paste()?

SPCA2 = df.pts[,3]
CLQU2 = df.pts[,4]

df.list = list(SPCA2, CLQU2)

for (i in df.list) {
    qp.mod = glm(paste(i,"~NDVI+ELEV"), family="quasipoisson", data=my.data)
    print(summary(gp.mod))
 }

person John Lowry    schedule 10.04.2015    source источник
comment
Вы пробовали qp.mod = glm(as.formula(paste(i,"~NDVI+ELEV")), family="quasipoisson", data=my.data)?   -  person Hao    schedule 10.04.2015
comment
проблема может быть с data=my.data; R попытается найти переменные, указанные в формуле, в этом, казалось бы, несуществующем (?) my.data. Если NDVI и ELEV действительно находятся в кадре данных с именем my.data, проблема в другом. Но если это просто векторы, не принадлежащие ни одному фрейму данных, просто опустите аргумент data=my.data.   -  person Dominic Comtois    schedule 10.04.2015
comment
Проблема в том, что вы передаете вектор значений (т.е. df.pts[,3]) в formula. Здесь вы хотите передать имя переменной. Таким образом, df.list должен быть списком имен переменных, а не фактических данных. примечание заключается в том, что у вас есть опечатка в вашем итоговом заявлении.   -  person user20650    schedule 10.04.2015
comment
Большое спасибо! Основная проблема заключалась в том, что df.list был списком векторов, а должен был быть списком имен. Это было исправлено с помощью df.list = (SPCA2, CLQU2) вместо list(). Однако было также правильно указано, что фрейм данных my.data не является правильным фреймом данных. Наконец, хотя она и работала без него, работала и функция as.formula(). Еще раз большое спасибо!   -  person John Lowry    schedule 11.04.2015
comment
@Джон Лоури; вы должны написать это как ответ, чтобы он мог помочь в будущих поисках (примите это;))   -  person user20650    schedule 11.04.2015


Ответы (2)


Большое спасибо! Основная проблема заключалась в том, что df.list был списком векторов, а должен был быть списком имен.

Другими словами, чтобы исправить проблему ...

df.list = ("SPCA2", "CLQU2")

вместо

df.list = list(SPCA2, CLQU2)

Однако было также правильно указано, что фрейм данных my.data не является правильным фреймом данных. Наконец, хотя она и работала без него, работала и функция as.formula(). Еще раз большое спасибо!

person John Lowry    schedule 12.04.2015

Вам нужно добавить as.formula перед paste, чтобы сообщить R, что вы хотите рассматривать его как формулу, а не символы.

qp.mod = glm(as.formula(paste(i,"~NDVI+ELEV")), family="quasipoisson", data=my.data)
person Hao    schedule 10.04.2015