为什么我在r中的循环只运行一次?

时间:2013-11-13 11:56:38

标签: r for-loop

之前我问过一个非常相似的问题,但我得到的答案似乎不适用于这种情况。我的代码的目的主要是获取文件,操作它并将操作文件保存在旧文件上。不幸的是,有很多文件,所以我已经合并了一个for循环,但它只是在循环一次运行后停止。我认为我的返回函数位于正确的位置,而我的for语句在以前略有不同的脚本版本中工作。  这是我的代码:

AddLatLon<- function(num, condition){


#Set working directiory 
# num is the number of files needing extraction e.g (3:5) , c(2,7)

connect <- file("./EOBS DATA/sources.txt", "r")
locdata <- readLines(connect)
close(connect)

info <- locdata[24:length(locdata)] # removes non data before the data begins



Infodata <- read.table(text = info, sep=',',fill=TRUE,colClasses='character',header ==TRUE )
InfoTable <- read.csv("./EOBS DATA/sources.csv")  
InfoTable$STAID <- as.numeric(InfoTable$STAID)



for(i in c(num)){
filename <-paste("./EOBS DATA/",condition, "_csv_data/", condition,i, ".csv", sep = "")


#if(i <10){
  #filename <- paste("./EOBS DATA/ECA_blend_", condition, "/" ,CONDITION, "_STAID00000", i, ".txt", sep = "")
#}
#if(i >=10 & i < 100){
  #filename <- paste("./EOBS DATA/ECA_blend_", condition, "/" ,CONDITION, "_STAID0000", i, ".txt", sep = "")
#}

#if(i>= 100 & i <1000){
  #filename <- paste("./EOBS DATA/ECA_blend_", condition, "/" ,CONDITION, "_STAID000", i, ".txt", sep = "")
#}
#if(i>= 1000){
  #filename <- paste("./EOBS DATA/ECA_blend_", condition, "/" ,CONDITION, "_STAID00", i, ".txt", sep = "")
#}
if(file.exists(filename) == FALSE) {
  next
}


#con <- file(filename, "r")
#data <- readLines(con)
#close(con)
#q <- data[21:length(data)] # removes non data before the data begins



#Impactdata <- read.table(text = q, sep=',',fill=TRUE,colClasses='character',header = TRUE )


x <- read.csv(filename)



point <- match(i, InfoTable$STAID) 
Lat <- InfoTable[point,5]
Lon <- InfoTable[point,6]

Lat <- as.character(Lat)
Lon <- as.character(Lon)


x$Lat <- Lat
x$Lon <- Lon   



x$X <- NULL
x$DATE<- as.Date(as.character(x$DATE), format='%Y%m%d')

Savename <- paste("./EOBS DATA/",condition, "_csv_data/", condition,i, ".csv", sep = "")   

if(condition == "rr"){
  condition <- "Precipitation"
}
if(condition == "tn"){
  condition <- "Minimum Temperature"
}
if(condition == "tx"){
  condition <- "Maximum Temperature"
}

names(x)<- c("Station_ID", "Source_ID", "Date(yyyy-mm-dd)", condition, "Quality_code(0='valid'; 1='suspect')", "Latitude", "Longitude")


write.csv(x, Savename)


} 
return(head(x))
}

1 个答案:

答案 0 :(得分:4)

num未定义,但从名称我非常确定您想要循环1:num,而不是c(num)。所以只需替换:

for(i in c(num)){

for(i in 1:num)){

for(i in seq_len(num)){

为什么seq_len?如果num为零(无循环)或为负(抛出错误),它将做正确的事。