Почему мой цикл работает только наполовину?(Р) - PullRequest
0 голосов
/ 09 апреля 2019

Я не уверен, как сделать воспроизводимый пример моей проблемы, и этот пост очень многословен. Я надеялся, что проблема может появиться. По сути, цикл for получает выходные данные из внешней программы, выполняет некоторые вычисления в R, а затем публикует результаты этих вычислений обратно во внешний файл.

Первая итерация цикла проходит отлично. Он все делает правильно, затем возвращается к началу цикла и переходит в правильный каталог (flist[2]), но когда он достигает второй функции (get_stress_table), он задыхается, печатая "NA" в файлы, а не чем имена файлов (flist, который является вектором имен файлов).

Имена файлов и подкаталоги, проходящие через этот цикл, имеют общее имя. Меня смущает тот факт, что он правильно переходит в правильный подкаталог в setwd, но печатает «NA» как имя файла в первой функции. Таким образом, я не понимаю проблемы.

Что-нибудь торчит?

Вот цикл for, который я пытаюсь запустить:

for (i in 1:length(flist)){

  setwd(paste0(solutions_dir, "\\", flist[i])) 

  max_stress <- get_stress_table(solutions_dir = solutions_dir, flist = flist[i], lsdynadir = lsdynadir, states = 5)
  xy_table <- element_time_series(stressed_eid = max_stress, solutions_dir = solutions_dir, flist = flist[i], lsdynadir = lsdynadir) 
  damp_coeff <- find_damp(xy_table = file_xy)
  setwd(kfile_complete)
  erode_damp(erosion_lines = erosion_lines, damp_coef = damp_coeff, kfile_mesh = flist[i])

}

Вот ошибка, которую я возвращаю:

3.
file(con, "r") 
2.
readLines(flist[i]) 
1.
get_stress_table(solutions_dir = solutions_dir, flist = flist[i], 
    lsdynadir = lsdynadir, states = 5)

Вот внутренняя часть этой функции:

  biggest_stresses <- data.frame(eid= numeric(),
                                 stress = numeric(),
                                 stringsAsFactors=FALSE) 

  for (j in 1:states) {
    fileconn <- file("get_stresses.cfile")
    line_one <- paste0("open d3plot ", solutions_dir, "\\", flist[i], "\\", "d3plot")
    line_two <- "ac"
    line_three <- "fringe 14"
    line_four <- "pfringe"
    line_five <- "anim forward"
    line_six <- "anim stop; state 100;"
    line_seven <- paste0("output ", solutions_dir, "\\", flist[i], "\\", flist[i], " ", j, " 1 1 1 0 0 0 0 1 0 0 0 0 0 0 1.000000")
    writeLines(c(line_one, line_two, line_three, line_four, line_five, line_six, line_seven), fileconn)
    close(fileconn)
    system(paste0(lsdynadir,"\\lsprepost4.3_x64.exe c=get_stresses.cfile -nographics"))


    stresses <- readLines(flist[i])
    start <- grep(stresses, pattern="*KEYWORD",fixed = T)
    stop <- grep(stresses, pattern="$Interpreted from averaged nodal data",fixed = T)
    stresses <- stresses[-seq(start, stop, by = 1)]
    writeLines(stresses, flist[i])
    stresses <- read.table(flist[i], header = FALSE)
    names(stresses) <- c("eid", "stress")
    max_stress <- which(stresses$eid == which.max(stresses$stress)

    biggest_stresses <- rbind(biggest_stresses, stresses[max_stress,]

  }

  return(biggest_stresses[which.max(biggest_stresses$stress),1])

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...