Я пытаюсь запустить много анализов посредничества и сделать это быстрее Я пытаюсь поместить функции lm () и mediate () в цикл for.Затем я передаю список списков в цикл, где каждый элемент списка представляет собой список из трех в форме c ("", "", "").
Передача элементов в цикл и исключение из спискаих иметь одинарные строки для переменных X, M и Y - это нормально.Я пробовал много вариантов get (), eval () и assign () внутри функции mediate (), но безрезультатно.Я думаю, это связано с моим использованием get () в lm ().
То, как должен выглядеть мой код:
MedVarList <- list(c('SCI', 'rMEQ', 'SIDAS'))
for(i in MedVarList){
X <- unlist((i)[1])
M <- unlist((i)[2])
Y <- unlist((i)[3])
model.M <- lm(get(M) ~ get(X), data = NewScDat)
model.Y <- lm(get(Y) ~ get(X) + get(M), data = NewScDat)
results <- mediate(model.M, model.Y, treat=get(X), mediator=get(M),
boot=TRUE, sims=500)
}
Биты model.M и model.Y работают нормально.Это угощение = и посредник = внутри посредника (), которое я просто не могу понять.Я получаю эту ошибку:
Error in get(X) : object 'SCI' not found
Если я изменяю вызов mediate () для непосредственного включения имен переменных, я получаю другую ошибку:
results <- mediate(model.M, model.Y, treat='SCI', mediator='rMEQ',
boot=TRUE, sims=500)
Error in `[.data.frame`(m.data, , treat) : undefined columns selected
Затем я подумал, что lm ()может быть, использовать «get (X)» в качестве имени переменной вместо «SCI», что get (X) выделяет изначально:
results <- mediate(model.M, model.Y, treat='get(X)', mediator='get(M)',
boot=TRUE, sims=500)
Error in get(M) : object 'rMEQ' not found
И просто чтобы проверить, что происходит, я посмотрел на то, что get(X) и get (M) теперь выплевывают:
get(X)
Error in get(X) : object 'SCI' not found
get(M)
Error in get(M) : object 'rMEQ' not found
Что я действительно пытаюсь достичь, так это иметь возможность запускать mediate () внутри цикла, используя список списков, как описано выше,Я делаю это, чтобы избежать повторения нескольких функций mediate () при ручной настройке.