我正在使用MODIS 8天数据,我正在尝试将一个MODIS产品的所有txt文件导入到R中,而不是作为单个data.frame导入,作为单独的txt文件。所以我以后可以对它们应用相同的功能。主要目标是导出每个txt文件中的特定元素。我成功地使用以下命令从一个txt文件中排除了所需的元素:
# selecting the element within the table
idxs <- gsub("\\]",")", gsub("\\[", "c(", "[24,175], [47,977], [159,520], [163,530]
,[165,721], [168,56], [217,820],[243,397],[252,991],[284,277],[292,673]
,[322,775], [369,832], [396,872], [434,986],[521,563],[522,717],[604,554]
,[608,50],[614,69],[752,213],[780,535],[786,898],[788,1008],[853,1159],[1014,785],[1078,1070]") )
lst <- rbind( c(24,175), c(47,977), c(159,520), c(163,530) ,c(165,721), c(168,56), c(217,820),c(243,397),c(252,991),c(284,277),c(292,673),c(322,775), c(369,832), c(396,872), c(434,986),c(521,563),c(522,717),c(604,554),c(608,50),c(614,69),c(752,213),c(780,535),c(786,898),c(788,1008),c(853,1159),c(1014,785),c(1078,1070))
mat <- matrix(scan("lst.txt",skip = 6),nrow=1200)
Clist <- as.data.frame(mat[lst])
但我需要所有txt文件中的这些元素,老实说,我不想手动运行它871次。所以我尝试读取所有txt文件,然后将此函数应用于它们。但不幸的是它不起作用。这是我的方法:
folder <- "C:/Users/Documents/R/MODIS/txt/"
txt_files <- list.files(path=folder, pattern=".txt")
df= c(rep(data.frame(), length(txt_files)))
for(i in 1:length(txt_files)) {df[[i]]<- as.list(read.table(txt_files[i]))}
这是我遇到的错误:
**Error in file(file, "rt") : cannot open the connection
In addition: Warning message:
In file(file, "rt") :
cannot open file 'rastert_a2001361.txt': No such file or directory**
附加信息:每个txt文件包含1200个和1200个列,需要从表中提取20-30个元素。
我非常期待您的回答,并感谢您对此事的任何帮助或建议。
答案 0 :(得分:0)
问题是list.files
仅返回文件夹中的文件名,而不是文件的完整路径。如果您的工作方向不是"C:/Users/Documents/R/MODIS/txt/"
,则您的代码无效。将您的代码更改为
for(i in 1:length(txt_files)) {df[[i]]<- as.list(read.table(file.path(folder, txt_files[i])))}
现在它应该工作了。
file.path
将您的路径和文件与正确的,特定于操作系统的路径分隔符相结合。