2013-07-01 5 views
1

나는 make (h1_lines)의 벡터 값을 기반으로 몇 가지 모델을 생성하기 위해 glm()을 사용하고 있습니다. 저는 sapply가 벡터의 각 값에 대한 모델을 반환하기를 바랍니다. 대신, 내 코드는 현재 목록의 한 부분이 모델 인 목록의 목록을 반환하고 있습니다. 그것은 sapply 함수 내에서 내가하는 모든 것을 반환하는 것 같습니다.sapply() 놀랍게도 결과 반환 - R

predict(models[1,], test_case) 
predict(models[2,], test_case) 
predict(models[3,], test_case) 

을하지만 지금 나는 sapply 단지 모델보다 더 반환 야기 할 수 없다 .. :

train = data.frame(scores=train[,y_col], total=train[,4], history=train[,5], line=train[,6]) 
h1_lines<- c(65, 70, 75) 

models <- sapply(h1_lines, function(x){ 
       temp_set<-train 
       temp_set$scores<-ifelse(temp_set$scores>x,1, 
            ifelse(temp_set$scores<x,0,rbinom(dim(temp_set)[1],1,.5))) 

       mod<-glm(scores ~ total + history + line, data=temp_set, family=binomial) 
            }) 

나는 내가 할 수있는이 선 후에 그렇게 작동하도록 코드를 싶습니다 인쇄 (희미한 (모델))하면 모델에 30 행 3 열이 있다고합니다 ??

EDIT TO QUESTION;

아래 제안 된 코드를 사용하면 예측 (models [[1], test_case)을 수행 할 수 있으며 완벽하게 작동합니다. 모델을 반환하거나 저장하여 모델을 생성하는 데 사용한 키를 사용하여 모델에 액세스 할 수 있습니까?

predict(models[[65]], test_case)) 

predict(models[[key==65]], test_case) 
+0

샘플 데이터를 제공 할 수 있습니까? '기차'는 자체를 참조합니다. – Thomas

+1

또한 'sapply'(@ Señor O의 대답에 따라 'lapply'여야 함)의 함수는 아마도 '반환'해야합니다. – Thomas

+1

기술적으로'mod'는 중괄호의 마지막 줄이므로 반환 될 것입니다.하지만 가독성을 위해 반환되는 내용을 명시 적으로 언급하는 것이 더 낫다고 동의합니다. –

답변

6

당신은 lapply 대신 sapply를 사용할 필요가 예를 들어, h1_scores를 사용하여는 다음과 같은 것이 될 수있다.

sapply은 너무 간단합니다.

lapply(ListOfData, function(X) lm(y~x, X)) 
sapply(ListOfData, function(X) lm(y~x, X)) 

내가 정확히 구별을 잘 모르겠지만, 혹시 있다면 sapply의 각 항목의 출력 (즉 Item$SubItem), 대신 lapply를 사용해야 추출 부품이 기대 : 봅니다. 숫자 주위에 따옴표를 사용하는 것을 기억

names(models) <- h1_lines 
names(h1_lines) <- h1_lines ## Before lapply 

을 그리고

models[["65"]] 

에 의해 그들에게 전화 :

업데이트

다음 질문에 대답, 당신도 할 수 있습니다. 부수적으로, 숫자로 목록 항목의 이름을 지정하는 것이 항상 최선의 방법은 아닙니다. 문제 해결 방법은 다음과 같습니다.

models[[which(h1_lines==65)]] 
+3

'sapply'는'simplify2array'를 모두 사용하려고 시도합니다. 값은 같은 길이입니다. –

+0

sapply가 "단순화"하려고 애쓰는 아이러닉이지만 lapply보다 더 복잡하고 "철저한"결과를 반환합니다 – appleLover

+0

senor o, 위대한 작품입니다. – appleLover