任何人都可以告诉我,我的for循环在r中只运行一次吗?

时间:2013-11-06 16:47:40

标签: r for-loop

任何人都可以告诉我,我的for循环在r中只运行一次吗?该脚本只是尝试为大约5个主要文件中的大约200个子文件的列表创建csv文件。这是我的代码:

ImpactGrid<- function(num, condition, CONDITION){


  #Set working directiory 

  for(i in num){

    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){
      filename <- paste("./EOBS DATA/ECA_blend_", condition, "/" ,CONDITION, "_STAID000", i, ".txt", sep = "")
    }


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 )

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



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

return(head(x))
}
}

2 个答案:

答案 0 :(得分:3)

如果您尝试从1到num,则代码为:

for(i in 1:num)

for循环遍历向量,但num的长度为1,因此它只迭代一次。

您还需要从循环体中删除return语句。否则,它将在第一次返回时退出。

答案 1 :(得分:1)

虽然我认为1:num是一个很好的答案并且可能是一个问题,但看起来for循环包含了包括最后一个return()语句在内的所有内容。因此,即使num是一个向量,它只会循环遍历所有代码,并在一个循环后从函数返回()。