2013-11-06 1 views
0

Может ли кто-нибудь сказать мне, пока мой цикл for в r работает только один раз? Сценарий просто пытается создать файлы csv для списка из примерно 200 подфайлов в пределах около 5 основных файлов. Вот мой код:Может ли кто-нибудь сказать мне, пока мой цикл for в r работает только один раз?

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)) 
} 
} 
+3

'for (i in 1: num)' – TheComeOnMan

+0

Как вы называете эту функцию, с какими аргументами? – zx8754

ответ

3

Если вы пытаетесь перейти от 1 до num, код:

for(i in 1:num) 

for петли перебрать вектора, но num имеет длину 1, так что итерирует только 1 раз.

Вам также необходимо удалить инструкцию return из корпуса петли. В противном случае он всегда будет покидать первый раз, когда он обратится к возврату.

+0

Также мое возвращение было не в том месте! Благодаря! – user2961410

1

Хотя я думаю, что 1: num является хорошим ответом и может быть проблемой, похоже, что цикл for охватывает все, включая последний оператор return(). Таким образом, даже если num был вектором, он будет только циклически проходить через весь код и возвращать() из функции после одного цикла.

+0

Вы правы! Я редактирую свой ответ, чтобы отразить это. –

+0

Спасибо за помощь! – user2961410

Смежные вопросы