2014-01-20 5 views
-1

데이터 파일의 디렉토리와 완전한 사례에 대한 임계 값을 취하는 함수를 작성해야하고, 완전히 관찰 된 사례의 수가 (여기서 각각의 파일에서 황산염과 질산염 (두 열)) 상관 관계를 계산해야합니다. 모든 변수)가 임계 값보다 큽니다. 이 함수는 임계 값 요구 사항을 충족시키는 모니터에 대한 상관 관계 벡터를 반환해야합니다. 어떤 파일이 임계 값 요구 사항을 충족하지 않으면, 함수 길이의 숫자 벡터를 반환해야합니다 0이 함수의 프로토 타입은 내 코드는 다음과NA 열 사이의 상관 관계

corr <- function(directory,threshold=0){ 
    a<-list.files("specdata") 
    for (i in a) { 
     data <- read.csv(paste(directory, "/", i, sep ="")) 
     x<-complete.cases(data) 
     j<-sum(as.numeric(x)) 
     sulfate<-data[,2] 
     nitrate<-data[,3] 
     b<-cor(sulfate,nitrate) 
    } 
    if (j>threshold) 
     return(b) 
    else 
     numeric() 
} 

과 같은

는 오류 messege

가 없습니다 다음 I는 ("specdata")

Z < -corr 입력하면3210 head (z) [012]

문제가 무엇인지 알 수 없습니다. 열의 NA 값이이 값과 관련이 있는지 여부는 알 수 없습니다. 내 코드에 뭔가 빠져있는 것 같아. 파일마다 하나의 데이터 프레임이 필요할 때 read.csv가 고유 한 데이터 프레임을 생성한다고 생각하지만이 경우 반환이 NA가 아닌 이유를 볼 수 없습니다 (임계 값이없는 경우). 내가 더 큰 임계 값 (1000)을 소개하면

그러나 :

z<-corr("specdata",1000) 
head(z) 
numeric(0) 

내가 필요로 예상 출력이 문제는 아마도 최고의 두 단계로 분해 될 수

cr <- corr("specdata", 150) 
head(cr) 
[1] -0.01895754 -0.14051254 -0.04389737 -0.06815956 -0.12350667 -0.07588814 
+2

'황산 <- 데이터 [X 2]; 질산염 <-data [x, 3]' – Roland

+0

자, 이제는 작동하는 것으로 보이지만 예상 된 결과는 아닙니다. 파일이 올바르게로드되지 않았을 수 있습니까? 내 CSV 파일은 001, 002, 003, ...으로 patern에 있지만 listprint 파일을 사용했기 때문에 이번에는 sprintf (% 03d)를 사용하지 않았습니다. –

+0

루프 내부에서 b를 덮어 씁니다. –

답변

0

입니다 - 컴퓨팅 각 파일의 값과 모든 파일의 결과를 수집합니다.

corr.file <- function(filename) { 
    data <- read.csv(paste(directory, "/", i, sep ="")) 
    x <- complete.cases(data) 
    sulfate <- data[,2] 
    nitrate <- data[,3] 
    b <- cor(sulfate,nitrate) 
    if (j>threshold) return(b) else return(numeric()) 
} 

a <- list.files("specdata") 
correlations <- sapply(a, corr.file) 
2
this is the correct and running solution you can refer to this 

corr <- function(directory, threshold = 0) { 
    ## 'directory' is a character vector of length 1 indicating the location of 
    ## the CSV files 

    ## 'threshold' is a numeric vector of length 1 indicating the number of 
    ## completely observed observations (on all variables) required to compute 
    ## the correlation between nitrate and sulfate; the default is 0 

    ## Return a numeric vector of correlations 
    df = complete(directory) 
    ids = df[df["nobs"] > threshold, ]$id 
    corrr = numeric() 
    for (i in ids) { 

    newRead = read.csv(paste(directory, "/", formatC(i, width = 3, flag = "0"), 
          ".csv", sep = "")) 
    dff = newRead[complete.cases(newRead), ] 
    corrr = c(corrr, cor(dff$sulfate, dff$nitrate)) 
    } 
    return(corrr) 
} 
complete <- function(directory, id = 1:332) { 
    f <- function(i) { 
    data = read.csv(paste(directory, "/", formatC(i, width = 3, flag = "0"), 
          ".csv", sep = "")) 
    sum(complete.cases(data)) 
    } 
    nobs = sapply(id, f) 
    return(data.frame(id, nobs)) 
} 
cr <- corr("specdata", 150) 
head(cr) 
+0

coursera 숙제에 대한 답변을 게시하지 않는 것이 좋습니다. – alexsuslin