簡體   English   中英

為什么我不能將向量中的條件值賦給R中的條件語句

[英]Why can't I assign a value to a vector as the result of a conditional statement in R

我有24個.csv文件,每個文件包含數十萬個數據點。

我的意圖是使此代碼執行以下操作:1.循環遍歷目錄中的每個文件2.從單個列中抽取1000個隨機點的樣本3.檢查每個樣本數據點是否在特定級別以下,這里是我被卡住了,如果為TRUE,則將result [i]更改為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)
}

整個操作的結果是長度為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)移動到函數內部以獲得預期的行為。

問題在於范圍。 level之后聲明的result向量的范圍比該函數中的result向量的范圍大。 他們不平等。

如果要從函數獲得result向量,請返回它。 如果既要向量又要向量平均值,則返回一個列表:

return(list(result = result, mean = mean(result)))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM