0

谁能告诉我我在 r 中的 for 循环只运行一次吗?该脚本只是尝试为大约 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))
}
}
4

2 回答 2

3

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

for(i in 1:num)

for循环迭代一个向量,但num长度为 1,所以它只迭代 1 次。

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

于 2013-11-06T16:49:42.957 回答
1

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

于 2013-11-06T17:19:52.863 回答