2014-11-14 3 views
0

라이브러리 (MASS)의 데이터 세트 탄생에 대해 10 배 교차 유효성 검사를 수행하는 함수를 만들었습니다. 함수 내의 코드는 내가 원하는 것을하고있다. 그러나, 나는 함수 밖에서 반환 된 값을 사용하고 싶지만 함수 밖에서 mean_mrate 변수에 액세스 할 수 없습니다.10 배 교차 유효성 확인 - 함수 문제

내 코드는 다음과 같습니다

result = tenfold3() 

result 변수는 함수 내부의 mean_mrate 변수와 동일합니다 :

library(MASS) 

tenfold3 = function() { 

    fold = 10 
    end = nrow(birthwt) 
    fold_2 = floor(end/fold) 

    misclasrate=numeric() 

    for(i in 1:10){ 

    df_i = birthwt[sample(nrow(birthwt)),] # random sort the dataframe birthwt 

    tester = df_i[1:fold_2,] # remove first tenth of rows - USE PREDICT ON THIS DATA 
    trainer = df_i[-c(1:fold_2),] # all other than the first tenth of rows - USE GLM ON THIS DATA 

    #mod = glm(low~age,family=binomial,data=trainer) 

    mod = glm(low~age+lwt+race+smoke+ptl+ht+ui+ftv,family=binomial,data=trainer) 
    ypred = predict(mod,data=tester,type='response') 
    ypred = trunc(0.5+predict(mod,data=tester,type='response')) # predicted values 

    val_df = data.frame(trainer[,1],ypred) 
    names(val_df) = c('train','ypred') 

    val_df$misclas = (val_df$train == val_df$ypred) 
    misclasrate[i] = 1-sum(val_df$misclas)/nrow(val_df) 
    mean_mrate = signif(mean(misclasrate),4) 
    g = cbind(misclasrate[i],mean_mrate) 
    return(mean_mrate) 

    } 

} 

답변

0

이 같은 함수를 호출합니다.

return은 함수에서 분리되어 루프의 첫 번째 반복 만 실행된다는 점에 유의하십시오. 또한 더 R과 같은 스타일은 함수에서 for 루프 내부의 내용을 래핑하고 lapply을 사용하여 함수를 10 번 호출하는 것입니다.

+0

새로운 R 사용자입니다. 샘플 코드를 확장/보여 주시겠습니까? – miyagi

관련 문제