2014-03-05 2 views
0

아래 코드에 대한 도움을 주시면 감사하겠습니다. 필자는 반복 된 데이터 세트를 통해 선형 회귀 직선에 맞게 코드를 작성했습니다 (개별적으로 각 환자 ID에 따라). 내가 정말로 원하는 것은 p 값이 0.05 이상인 이름/id를 추출 할 수 있다는 것입니다.선형 회귀를위한 for 루프의 이름 지정 출력

id <- c("A1", "A1","A1", "B10", "B10", "B10","B10", "B10", "C100", "C100", "C100", 
"G100", "G100", "G100") 

weight <- rnorm(14, 70) 

height <- rnorm(14, 1.7) 

A <- data.frame(id, weight, height) 


model1 <-function(weight, height){ 
anything<-lm(weight~height) 
res<-round(summary(anything)$coefficients[, 4], 3) 
res 
} 


model2<-function(weight,height){ 
res<-c() 
for(i in unique(A$id)){ 
    res2<-model1(A[A$id == i,]$weight, A[A$id == i,]$height) 
    res<-c(res,res2) 
} 

res 
} 

문제는 지금은 데이터 프레임 A (즉, A1, B10, C100 및 G100)에 주어진 ID에 따른 출력 (고해상도)를 지명하고 싶은 것이있다. 나는 names(res) <- unique(A$id)을 추가하려고 시도했으나 이것이 정말로 내가 원하는 것을주지는 못한다. Pls은 필자가 작성 루프에 익숙하지 않았기 때문에 코드 개선을위한 제안을 환영 할 것입니다. 질문이 명확하기를 바란다. 그러나 그렇지 않다면 나는 어떤 질문이라도 대답하게되어 기쁠 것이다.

답변

3

c()은 이름이 지정된 입력을 사용할 수 있습니다. 내가 이름 xy와 벡터를 만들려면 예를 들어, I는 다음과 같이 수행 할 수 있습니다 :

c(x = 1, y = 2) 

를 귀하의 경우에는, 당신은 res2을 추가 할 때, 당신은 그것을 이름을 것입니다 :

res <- c(res, name = res2) 

여기서 name은 원하는 이름입니다.

루프 전에 벡터를 미리 할당하는 것이 훨씬 더 효과적이라는 점에 유의하십시오.

+0

답장을 보내 주셔서 감사합니다. A $ id의 이름이 결과에 태그로 지정되었는지 어떻게 확인합니까? 참고 내 원래의 데이터를 훨씬 더 큰 그래서 수동으로 할 수 없을 것입니다. –

+2

다음과 같이 컨테이너를 초기화하거나 사전 할당하십시오 :'ids <- unique (A $ id)'; 'res <- vector (length (ids), mode = "list")'; 'names (res) <- ids'; 그리고 루프에서'res [[i]] <- model1 (A ...'. – fabians

+0

@ fabians, 당신의 제안은 완벽하게 작동했습니다. 내가하고 싶었던 것입니다. 정말 고마워요. 내 하루! –