繁体   English   中英

为什么 R 只读取前九个文件

[英]Why is R reading only the first nine files

我正在使用此代码从文件夹“test_dir”中读取多个 .xls

library(readxl)
files <- list.files(path = "./test_dir", pattern = "*.xls", full.names = T)
tbl <- sapply(files, read_excel, simplify=FALSE, skip=7) %>% 
bind_rows(.id = "id")

每次,只有前 9 个数据集被读入 r ie Book1-Book9,有谁知道原因? 在下图中查看我的文件夹的结构文件夹结构 样本数据

这里有很多评论。 我会尝试将它们综合成一个明确的答案。 原始海报 (OP) 试图使用名为readxl的优秀 R 包中的read_excel函数将多个 Excel 工作簿读入 R。 OP 说只能导入前 9 个工作簿。 通过 DropBox 提供文件后,r2evans 只能导入工作簿 1、9 和 10,而我只能导入工作簿 1 和 9。在进一步询问中,OP 说这些文件是“从软件生成的”。

我很确定这就是问题所在。 Excel 文件是由软件生成的,大概不是由 Excel 生成的。 OP 没有说明是什么软件生成了这些文件。 他们说“软件”而不是 Excel 的事实意味着 Excel 没有创建文件。

我也相信工作簿 1 和 9 由 OP 打开,然后保存,然后与其他人一起压缩。 事实上,在 Excel 中打开文件后保存文件并不是真正必要的,因为即使文件在没有保存的情况下关闭,Excel 也会为您进行静默保存。 在任何情况下,打开文件然后关闭它(保存或不保存)都会使用readxl将文件神奇地“导入”到 R 中。 我不知道为什么,但只能假设允许软件(可能不是 Excel)创建 Excel 文件是问题的原因。 请注意,没有错误,也没有任何警告。 数据只是空的(没有行,请参阅下面的尝试导入“Book11.xls”)。 除了一个一个打开每个文件然后关闭它们(保存或不保存)之外,我没有任何答案。

> Book11 <- read_excel("E:/SO/Book11.xls", skip=7)
> Book11
# A tibble: 0 x 0

编辑:请注意,“Book11.xls”确实包含数据。 read_excel函数成功读取文件(没有错误),但没有成功导入数据(再次,没有错误)。 这对我来说很奇怪。 除了 Book1.xls 和 Book9.xls 之外的所有其他文件都给出相同的结果。 也就是说,一个空的tibble。 所有文件都不是空的。 它们包含许多行和列。 见下文...


“Book1.xls”可能是由 OP(或其他人)打开的,并且可以导入:

> Book1 <- read_excel("E:/SO/Book1.xls", skip=7)
> Book1
# A tibble: 1,524 x 35
   Position `Position [µm]` `Al-K` `Si-K` `S-KA` `K-KA` `Ca-KA` `Ti-KA`
      <dbl>           <dbl>  <dbl>  <dbl>  <dbl>  <dbl>   <dbl>   <dbl>
 1        0             0     3     11.3   1179       0   3076.   3.67 
 2        1            14.5   6.33  10.3   1230.      0   3030.   2.67 
 3        2            29.0   1.33  15.3   1160.      0   3080.   3.33 
 4        3            43.4   1     11.3   1232.      0   3112.   0.667
 5        4            57.9   3.67   8.67  1227.      0   3116.   1.67 
 6        5            72.4   5.33   8.67  1313       0   3153    6    
 7        6            86.9   5.67  16     1181.      0   3100.   0.333
 8        7           101.    2     15     1218       0   3130.   1.33 
 9        8           116.    2.33  11.3   1207.      0   3078.   1.33 
10        9           130.    3     15.3   1249       0   3089.   7    
# ... with 1,514 more rows, and 27 more variables: `Mn-KA` <dbl>,
#   `Fe-KA` <dbl>, `Mg-K` <dbl>, `Na-KA` <dbl>, `Cr-KA` <dbl>,
#   `Co-KA` <dbl>, `Ni-KA` <dbl>, `Cu-KA` <dbl>, `Zn-KA` <dbl>,
#   `As-KA` <dbl>, `P-KA` <dbl>, `Sr-KA` <dbl>, `Zr-KA` <dbl>,
#   `Mo-KA` <dbl>, `Rb-KA` <dbl>, `Br-KA` <dbl>, `Y-KA` <dbl>,
#   `Cl-KA` <dbl>, `Ga-KA` <dbl>, `Cd-KA` <dbl>, `V-KA` <dbl>,
#   `Cs-KA` <dbl>, `Ba-KA` <dbl>, `Hf-LA` <dbl>, `Pb-LA` <dbl>,
#   `U-LA` <dbl>, `Th-LA` <dbl>

我也尝试使用 XLConnect 包,结果是一样的。 编辑:我撒谎。结果不一样。这个包在尝试导入文件时出错。与 readxl 包不同,它给出了 NO ERROR 但无法导入数据。)

library(XLConnect)
> wb <- loadWorkbook("E:/SO/Book11.xls")
Error: LeftoverDataException (Java): Initialisation of record 0x92(PaletteRecord) left 2 bytes remaining still to be read.

> wb <- loadWorkbook("E:/SO/Book1.xls") # No error

因此,这是否是这两个包中的错误值得商榷。 我会说不是。 当您尝试在 Excel 中打开文件时出现警告消息这一事实表明生成文件的软件更有可能出现问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM