R如何创建包含来自多个txt文件的文本的列表?

时间:2018-11-08 12:05:16

标签: r list file loops path

我正在尝试通读n个.txt文件的列表,并将内容保存到字符列表中。但是,当我阅读它们并将它们添加到列表“ txts”时,出现了以下错误: “阅读32项 要替换的项目数不是替换长度的倍数”

每个txt文件都包含32行32个字符(“ 0”和“ 1”)。第一步,我想获得包含txt文件内容的n个元素(每个元素包含32个项目,每个项目32个字符)的列表。

然后我需要将32x32的每个字符转换为1x1024的矢量(为此我将使用strstrip),最后,我将需要具有n行(txt数)行和1024列的矩阵(每个txt文件的字符数)。

在下面,我试图创建两个txt文件内容的列表,但给我一个错误。我使用扫描是因为我需要txt文件中的所有字符。我尝试了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 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 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0   [64] 0 0 0 0 0 0 0 0 0 0 1 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 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 1 1 1 1 1 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 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 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 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 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 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 1 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 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 0”

这将有1024个字符

谢谢

1 个答案:

答案 0 :(得分:0)

据我了解,您的问题是将每个文档存储为列表,并将数字值用作字符。事实上,您可以使用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:请在下一次提供示例。这对于更好地理解问题以及能够重现该问题很重要。