[英]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.