write.xlsx(openxlsx)的编码问题

时间:2018-09-12 16:24:37

标签: r list encoding export openxlsx

我使用write.xlsx()函数(来自openxlsx包)将列表对象转换为excel电子表格,该列表中的每个元素都转换为excel文件的“工作表”。在过去,此功能非常有用,而且我从未遇到过任何问题。据我了解,此软件包和功能尤其不需要在计算机上进行任何特定的Java更新即可使其工作。

但是,最近我发现该函数产生错误。这是我为列表运行write.xlsx()时在控制台中指出的内容:

Error in gsub("&", "&", v, fixed = TRUE) : 
  input string 5107 is invalid UTF-8

我已经确定了引起问题的数据框,但是我不确定如何确定数据框的哪一部分导致了错误。

我什至继续使用enc2utf8()函数,特别是此数据帧中的所有列,但仍然遇到错误。我在数据框本身上使用了substr()函数,它向我显示了每一列的前n个字符,尽管我看不到输出中有任何明显的问题。

我什至继续使用install.packages()函数,以在发生任何更新时再次重新下载openxlsx软件包。

有人知道我将如何确定错误原因吗?它是包装中所写的功能吗?如果问题出在数据本身的编码上,enc2utf8()不足以解决问题吗?

谢谢!

1 个答案:

答案 0 :(得分:1)

就发现错误而言,给出的数字将您指出问题(在您的情况下为5107)。这似乎是在计算写入文件的字符串。为了找到问题所在的特定数据点,此方法对我有用:

假设我们的数据框有20个变量,其中10个是字符类型。

  • 如果要编写列标题(因为所有这些都是字符串),则减去变量的数量5107-20 = 5087
  • 用每个观察值的字符变量数除以余数(5087/10 = 508.7);这意味着问题出在第509行(因为标题和前508行之间有5080 + 20 = 5100个字符串)
  • 第509行中的第7个字符变量将是您的有问题的孩子。