R Как мне создать список с текстом из нескольких текстовых файлов? - PullRequest
0 голосов
/ 08 ноября 2018

Я пытаюсь прочитать список из n файлов .txt и сохранить содержимое в виде списка символов. Однако, когда я читаю их и добавляю в список «txts», это выдает мне ошибку: «Прочитайте 32 пункта количество заменяемых элементов не кратно длине замены "

Каждый из текстовых файлов содержит 32 строки по 32 символа («0» и «1»). На первом этапе я хотел бы получить список из n элементов (каждый из 32 элементов по 32 символа в каждом) с содержимым текстовых файлов.

Затем мне нужно будет преобразовать каждый из 32x32 символов в вектор 1x1024 (для этого я буду использовать strstrip), и в самом конце мне понадобится матрица из n (количество txts) строк и 1024 столбцов. (количество символов в каждом текстовом файле).

С помощью приведенного ниже я попытался создать список содержимого двух текстовых файлов, но выдает ошибку. Я использовал сканирование, потому что мне нужны все символы в текстовых файлах. Я попробовал read.table, и он отлично работает, но он конвертирует их в числа, и я не хочу этого.

file_example <-list("digits/trainingDigits/0_0.txt","digits/trainingDigits/0_1.txt")

txts <- c()

for (i in file_example){
  nb = scan(s,what="character", sep=NULL)
  txts[s] <- c(nb)
}

Есть идеи, как ее решить? Надеюсь, это достаточно ясно.

Спасибо !!


Обновление:

Я попробовал следующее с помощью следующего кода:

file_example <- c("digits/trainingDigits/0_0.txt","digits/trainingDigits/0_1.txt")

txts <- c()

mylist <- list()
for (i in 1: length(file_example)){
  nb = read.csv(file_example[[i]])
  txts[s] <- c(nb)
  txts <- as.character(nb$X)
  mylist[[i]] <- txts
}

Тем не менее, я получаю список из двух элементов и в пределах 32 чисел, но я думаю, что символы не сохранились.

первый элемент списка из двух:

* * Тысячу двадцать-три [[1]] [1] "1.111111e + 19" "1.111111111e + 21" "1.1111111111111e + 24" "1.1111110111111e + 24" "1.11111100000111e + 25" [6] "1.11111100000001e + 25" "1.11111100000001e + 25" "1.111111e + 25" "1.111111e + 25" "1.11111e + 25"
[11] "1.11111e + 25" "1.11111e + 25" "1.11111e + 24" "1.11111e + 24" "1.11111e + 24"
[16] "1.11111e + 24" "1.111111e + 25" "1.111011e + 25" "1.111e + 25" "1.111e + 24"
[21] "1.11100000000001e + 24" "1.11100000000011e + 24" "1.11100000000111e + 24" "1.11000000111111e + 23" "1.1110001111111e + 23" [26] "1.1111111111111e + 23" "1.111111111111e + 22" "1.11111111111e + 22" "1.11111111e + 21" "1.1111e + 20"
[31] "1.1e + 19"

И конечная цель - получить это для каждого из файлов .txt, чтобы затем его можно было преобразовать в вектор с 1024 элементами:

"[1] 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 [64] 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 [127] 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0 0 0 0 0 1 1 1 1 0 0 0 0 0 0 0 [190] 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0 0 0 0 0 0 0 1 1 1 1 0 0 0 0 [253] 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 1 1 1 0 0 0 [316] 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 1 1 1 0 [379] 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 0 "

Это будет иметь 1024 символа

Спасибо

1 Ответ

0 голосов
/ 08 ноября 2018

Насколько я понимаю, ваша проблема заключается в том, чтобы хранить каждый документ в виде списка и иметь числовые значения в качестве символа. Фактически, вы можете преобразовать их обратно в персонажей, используя as.charachter() Здесь я приведу простой пример. Если в ваших данных больше столбцов, просто замените вектор txts на матрицу и добавьте дополнительный цикл for для хранения индексации каждой строки.

######### Creating the files
a<- c("0", "2","1","1")
b<- c("0","1","1","0")

#### path to read from and store the example
path<-"C:/Users/Carles/Desktop/"

write.csv(a,paste0(path,"a.txt"))
write.csv(b,paste0(path,"b.txt"))

# reading example
file_example<- c(paste0(path,"a.txt"), paste0(path,"b.txt"))

# creating a list to store values
mylist<-list()
for (i in 1:length(file_example)){
  nb = read.csv(file_example[i]) # reading the documents
  txts <- as.character(nb$x) # getting the vector x since read.csv stores data in dataset form
  mylist[[i]]<-txts # passing the texts stored to the list
}



> mylist
[[1]]
[1] 0 2 1 1

[[2]]
[1] 0 1 1 0

Надеюсь, это поможет! BR,

PD: В следующий раз приведите пример. Это важно для лучшего понимания проблемы, а также для возможности ее воспроизведения.

...