2017-02-20 1 views
0

응답 변수 (dat_prob) 포함하는 내 데이터 집합의 열을 통해 루프에 의해 glmer 실행하려고합니다. 내가 사용하는 코드는 다른 stackoverflow 질문 (Looping through columns in R)에서 연구 코드에서 적응했습니다.루프를 통해 열 glmer

그들의 코드 :

dat_y<-(dat[,c(2:1130)]) 
dat_x<-(dat[,c(1)]) 
models <- list() 
# 
for(i in names(dat_y)){ 
     y <- dat_y[i] 
    model[[i]] = lm(y~dat_x) 
    } 

내 코드 :

dat_prob<-(probs[,c(108:188)]) 
dat_age<-(probs[,c(12)]) 
dat_dist<-(probs[,c(20)]) 
fyearcap=(probs[,c(25)]) 
fstation=(probs[,c(22)]) 
fnetnum=(probs[,c(23)]) 
fdepth=(probs[,c(24)]) 

models <- list() 
# 
for(i in names(dat_prob)){ 
    y <- dat_prob[i] 
    y2=as.vector(y) 
    model[[i]] = glmer(y ~ dat_age * dat_dist + (1|fyearcap) + (1|fstation)+ 
    (1|fnetnum)+ (1|fdepth),family=binomial,REML=TRUE) 
} 

그리고이 오류, 오류와 유사한이 하이퍼 링크 질문을 받았다가 나타납니다 내가왔다

Error in model.frame.default(drop.unused.levels = TRUE, formula = y ~ : 
invalid type (list) for variable 'y' 

을 이 작업을 몇 시간 동안하고 이제 나무를 통해 숲을 볼 수 없습니다.

도움을 주시면 감사하겠습니다.

+0

당신은에 최선을 다하는의 더 나은 것 data.frame 및 iterate 이상. 또는 사전에 수식을 구성하고 (데이터를 부분 집합 할 필요가 없음)이를 glmer 함수에 전달할 수 있습니다. 'sapply' 또는'lapply'를 사용하여 수식 목록을 뒤집을 수 있습니다. –

답변

0

y <- dat_prob[i]y을 목록 (또는 데이터 프레임, 무엇이든)으로 만듭니다. 목록은 벡터이므로 is.vector(list())을 시도하므로 심지어 y2 = as.vector(y)은 여전히 ​​목록/데이터 프레임입니다 (사용하지 않더라도).

class(as.vector(mtcars[1])) 
# [1] "data.frame" 

은 데이터 프레임으로부터 숫자 벡터를 추출 [[를 사용하려면 y <- dat_prob[[i]]한다.

class(mtcars[[1]]) 
# [1] "numeric" 

로마식에 동의하지만 수식을 사용하는 것이 좋습니다. 이런 식으로 뭔가를 시도 :

for(i in names(dat_prob)) { 
    my_formula = as.formula(paste(i, 
    "~ dat_age * dat_dist + (1|fyearcap) + (1|fstation)+ (1|fnetnum)+ (1|fdepth)" 
)) 
    model[[i]] = glmer(my_formula, family = binomial, REML = TRUE) 
} 

나는 또한 당신이 80 개 다른 응답 변수를 시도하고있는 어떤 꽤 회의적,하지만 당신의 질문이 아니다 ...