2014-04-03 3 views
1

각각 수십만 개의 데이터 포인트를 포함하는 24 개의 .csv 파일이 있습니다. 각각의 샘플 데이터 포인트 인 경우 2. 볼 수있는 하나의 열에서 3. 1000 임의의 점의 샘플을 채취 디렉토리에있는 파일의 각 불구하고 1. 루프 :조건문의 결과로 벡터에 값을 할당 할 수없는 이유는 무엇입니까?

내 의도는이 코드입니다 특정 레벨 아래에서, 여기에 내가 붙어있는 곳이 TRUE면 1로, 그렇지 않으면 FALSE로 0으로 바뀝니다. 결과 벡터는 전혀 변하지 않습니다. 이견있는 사람?

rm(list=ls()) 

years<-c(1990:2013) 

##################################### 
S=1000 
level<-.075 
result<-(1:S) 
inBounds<-function(data){ 
    for(i in 1:S){ 
    result[i]<-(data[i] < level) 
    } 
    return(mean(result)) 
} 
##################################### 

#Get sample arithmetic mean readings from 1990-2013 

n=1000 
temp<-data.frame() 
arithMean<-data.frame() 
Samp<-data.frame() 
CI<-data.frame() 

#Get data file names 
files <- list.files(path="~/Proj",pattern="*.csv", full.names=T, recursive=FALSE) 
for(i in 1:23){ 
    temp<-read.csv(files[i],header=TRUE,sep=",") 
    arithMean<-temp$Arithmetic.Mean 
    Samp<-sample(arithMean,n,replace=TRUE,prob=NULL) 
    CI[1,i]<-inBounds(Samp) 
} 
+0

오류가 있습니까? 'level'은 함수의 범위에서 선언되지 않습니다. –

+0

그래서 scope는 R에서 다르게 처리됩니다. python이나 C++과 다릅니 까? 레벨 및 결과가 동일한 블록에서 생성되고 초기화됩니다. – Murface

+0

해당 언어는 말할 수 없지만 기능 내부는 레벨 및 결과가 처음 생성 된 블록과 다릅니다. –

답변

0

전체 연산의 결과는 길이 23의 단일 벡터이다, 그래서 당신은 sapply하여이 작업을 수행 할 수 있습니다

CI <- sapply(1:23, function(i) { 
    temp <- read.csv(files[i], header=T, sep=",") 
    return(mean(sample(temp$Arithmetic.Mean, n, replace=T, prob=NULL) < level)) 
}) 

result이 함수에서 변경되지 않은 이유는이 선언이다 함수 밖에서 함수를 편집하고있었습니다. 함수 내에서 result<-(1:S)을 이동하여 예상되는 동작을 얻을 수 있습니다.

+0

감사합니다! 그게 많은 도움이됩니다. – Murface

0

문제는 범위와 관련이 있습니다. level 다음에 선언 된 벡터는 해당 함수의 result 벡터보다 높은 범위에 있습니다. 그들은 평등하지 않습니다.

result 벡터를 함수에서 원하면 반환하십시오. 벡터와 평균을 모두 원하면 목록을 반환하십시오.

return(list(result = result, mean = mean(result))) 
관련 문제