2014-05-20 8 views
1

우선, 나는 R 프로그래밍 과정을 처음으로 시작하는 R 초보자입니다. 스택 오버플로에 대한 훌륭한 기고 가를 통해 나 자신을 배우려고 노력하는 중 R의 기본 사항을 가르치는 데 극도로 부족합니다. 중첩 된 함수가 작동하는 방식을 알아 내려고하고 있는데, 이는 또한 어휘 범위 지정이 작동하는 방법을 배워야 함을 의미합니다. 여러 CSV 파일에서 완전한 사례를 계산하고 멋진 테이블을 즉시 출력하는 함수가 있습니다. 다음은 CSV 파일입니다 : https://d396qusza40orc.cloudfront.net/rprog%2Fdata%2Fspecdata.zip 을 그리고 여기, 내가이 적용되는 물건을 사용하는 경우는 청소기 것 내 코드 실현 있어요하지만 그대로 작동 : 지금의 서로 다른 변수를 호출하는 것을 시도하고있다중첩 함수에서 객체 호출하기 R

complete<- function(directory, id=1:332){ 
     data<-NULL 
     for (i in 1:length(id)) { 
       data[[i]]<- c(paste(directory, "/",formatC(id[i], width=3, flag=0),".csv",sep=""))  
     } 
     cases<-NULL 

     for (d in 1:length(data)) { 
       cases[[d]]<-c(read.csv(data[d])) 
     } 
     df<-NULL 
     for (c in 1:length(cases)){ 
       df[[c]]<-(data.frame(cases[c])) 
     } 
     dt<-do.call(rbind, df) 
     ok<-(complete.cases(dt)) 
     finally<-as.data.frame(table(dt[ok, "ID"]), colnames=c("id", "nobs")) 
     colnames(finally)<-c('id', 'nobs') 
     return(finally) 

} 

이 함수는 D 뱉어 마지막 $ NOBS없이

corr<-function(directory, threshold=0){ 
     complete(directory, id=1:332) 
     finally$nobs 

} 

CORR ('specdata')

상기 데이터 프레임은 최종적으로 그 새로운 기능 내의 상기 함수의 출력 인 ata 프레임으로해야하지만, 객체에서 변수 nobs를 호출하려고 할 때 객체가 마지막으로 발견되지 않는다고합니다. 이 문제는 렉시 컬 스코핑 주제에 대한 나의 이해 부족으로 인한 것임을 알고 있습니다. 교수는 실제로 렉시 컬 스코핑을 매우 명확하게 만들지 않았으므로 중첩 된 함수 환경 내에서 객체를 찾는 방법을 완전히 알지 못합니다. 도움이 될 것입니다.

+0

'corr' 함수를 호출하는 코드를 게시하여 오류가 발생합니다. – MattLBeck

+0

죄송합니다. 오류가 발생하는 코드가 있습니다. 드디어 $ nobs가 완전히 잘못된 형식 인 것을 알았습니다. 그게 도움이 필요한 것입니다 ... – user3653647

답변

3

개체 finally은 범위가 입니다. 반환하는 객체를 사용하여 추가 작업을 수행하려면 작업중인 환경의 변수에 저장해야합니다 (이 경우 작업중인 환경은 corr()입니다. 어떤 기능 내부에서 작업해도 환경은 "지구 환경"이 될 것입니다. 즉,이 코드는 작동합니다 : 나는 범위를 벗어나 이제 객체 finally 구별하기 위해 complete()this.finally에 의해 반환되는 객체를 호출하고

corr<-function(directory, threshold=0){ 
    this.finally <- complete(directory, id=1:332) 
    this.finally$nobs 
} 

. 물론, 당신은 그것을 당신이 좋아하는 어떤 것이라도 부를 수 있습니다!