首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >read_excel正确导入文件,但在试图将其放入列表时出现“无效多字节字符串”错误。

read_excel正确导入文件,但在试图将其放入列表时出现“无效多字节字符串”错误。
EN

Stack Overflow用户
提问于 2017-09-30 13:57:22
回答 2查看 4.7K关注 0票数 5

当我使用Posti-Letto-Istat.xls包中的read_excel从文件readxl中读取任何工作表时,我没有问题:

代码语言:javascript
复制
library(readxl)
pl_istat1 <- read_excel(path = "data/Posti-Letto-Istat.xls", sheet = 1, range = "A6:I66", na = "....")

但是,如果我尝试使用lapplyfor循环将所有三个工作表都包含在列表中,则会得到以下错误。

代码语言:javascript
复制
lapply(1:3, function(i) read_excel(path = "data/Posti-Letto-Istat.xls", sheet = i, range = "A6:I66", na = "....")) 

Error in nchar(x, type = "width") : invalid multibyte string, element 4

我发现这是一个编码问题,如果我做了这样的事情

代码语言:javascript
复制
names(pl_istat[[i]]) <- iconv(enc2utf8(names(pl_istat[[i]])),sub="byte")

每张纸上,我就没问题了。

但是,是否有一种方法可以让列表接受由tibble正确导入的readxl

我的会话信息:

代码语言:javascript
复制
R version 3.3.3 (2017-03-06)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows >= 8 x64 (build 9200)

locale:
[1] LC_COLLATE=English_United States.1252  LC_CTYPE=English_United 
States.1252    LC_MONETARY=English_United States.1252 LC_NUMERIC=C                          

[5] LC_TIME=English_United States.1252    

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

other attached packages:
[1] readxl_1.0.0

loaded via a namespace (and not attached):
[1] magrittr_1.5     assertthat_0.2.0 R6_2.2.2         tools_3.3.3      bindrcpp_0.2     glue_1.1.1       dplyr_0.7.3      tibble_1.3.4     Rcpp_0.12.12    

[10] cellranger_1.1.0 rematch_1.0.1    pkgconfig_2.0.1  rlang_0.1.2      bindr_0.1     
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-09-04 14:43:49

我也犯了同样的错误,可以通过用read_excel()包装as.data.frame()来解决这个问题。

代码语言:javascript
复制
lapply(
  1:3, 
  function(i) {
    as.data.frame(
      read_excel(path = "data/Posti-Letto-Istat.xls", sheet = i, range = "A6:I66", na = "....")
    )
  }
) 
票数 5
EN

Stack Overflow用户

发布于 2019-08-07 20:14:32

在尝试将使用readxl创建的tibbles保存到列表中时,我也遇到了类似的问题。因为我有多个标题行,所以我只读取标题,将它们连接起来,并创建一个名为headers的向量,其中包含列名。然后用read_excel和参数col_names = FALSE读取实际数据。我没有问题将这些“无名”标签保存到一个列表中,但是如果我使用headers重命名这些列,我会得到以下错误:

代码语言:javascript
复制
Error in nchar(x[is_na], type = "width") : 
  invalid multibyte string, element 1

我通过在重命名tibble之前更改编码来解决这个问题:

代码语言:javascript
复制
headers <- enc2native(headers)

但在此之后,当列表被打印出来时,我会收到这样的警告:

代码语言:javascript
复制
In fansi::strwrap_ctl(x, width = max(width, 0), indent = indent,  :
  Encountered a C0 control character, see `?unhandled_ctl`; you can use `warn=FALSE` to turn off these warnings.

根据12的说法,这似乎是由R基中的一个错误引起的,对我来说这不是一个问题。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46503390

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档