Сложность с созданием имен файлов на основе использования строки для цикла - PullRequest
1 голос
/ 09 апреля 2019

Я создаю вектор имен файлов на основе последовательности строк.Строка «ABcd» должна создавать вектор имен файлов «mypath / A.txt», «mypath / B.txt», «mypath.cc.txt» и «mypath / dd.txt».

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

mystring <- "ABcd"

# count number of characters
stringlength <- nchar(mystring)

# define file path 
filepath <- "mypath"

# initialize vectors
filename <- rep("NA", stringlength)
files <- rep("NA", stringlength)
symbol <- rep("NA", stringlength)
prefix <- "NA"

# create filename prefix from letters in mystring - caps are single and lowercase are double
for (i in stringlength) 
{
  symbol[i] <- substring(mystring, i, i)
  if (symbol[i] %in% letters) {
    prefix <- paste(symbol[i], symbol[i], sep = "")
  } else {
    prefix <- symbol[i]
  }
  filename[i] <- paste(filepath, "/", prefix, ".txt", sep="")
  files <- c(files, filename[i])
}

1 Ответ

0 голосов
/ 09 апреля 2019

Похоже, у меня было две ошибки. Во-первых, как указывалось, мой цикл for был неверным и не зацикливался на количестве символов, как хотелось бы. Заменив «for (i в длине строки)» на «for (i в seq_len (длина строки))» исправил это.

Во-вторых, строка «files <- c (files, filename [i])» заставляет цикл добавлять новые записи в уже существующие NA, вместо того, чтобы просто указывать нужный вектор имен файлов. Замена соответствующей индексацией с использованием «files [i] <- filename [i]» исправляет это. </p>

mystring <- "ABcd"

# count number of characters
stringlength <- nchar(mystring)

# find filename for image corresponding to symbol
filepath <- "/Users/mypath"

# initialize vectors
filename <- rep("NA", stringlength)
files <- rep("NA", stringlength)
symbol <- rep("NA", stringlength)
prefix <- "NA"

# create filename prefix from letters in mystring - caps are single and lowercase are double
for (i in seq_len(stringlength)) 
{
  symbol[i] <- substring(mystring, i, i)
  if (symbol[i] %in% letters) {
    prefix <- paste(symbol[i], symbol[i], sep = "")
  } else {
    prefix <- symbol[i]
  }
  filename[i] <- paste(filepath, "/", prefix, ".txt", sep="")
files[i] <- filename[i]
}
files
1] "/Users/mypath/A.txt"  "/Users/mypath/B.txt"  "/Users/mypath/cc.txt" "/Users/mypath/dd.txt"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...