【问题标题】:how to make r read files from directories containing non-English characters如何使 r 从包含非英文字符的目录中读取文件
【发布时间】:2018-04-18 08:55:08
【问题描述】:

我的桌面上有两个文件夹,它们包含相同的文件。看来,包含非英文字符的目录(路径)在我当前的 windows 环境中不起作用。

> setwd("C:/Users/my_user/Desktop/folder_name_including_only_english_characters")
> list.files()
[1] "test.csv"    "test.jpg"    "test.pdf"    "Test.R"      "test.sql"    "test.xlsx"
> setwd("C:/Users/my_user/Desktop/folder_name_including_non_english_characters_like_ıüö")
> list.files()
character(0)

我不确定这是否与 R 或 windows 10 的设置有关。

我的另一台电脑没有这样的问题。

更新

在我最近的尝试中,我注意到,虽然 list.files() 函数失败,但 R 仍然可以使用内置的 read.csv2 函数从包含非英文字符的目录中读取文件。但是,当我尝试读取 xlsx 文件时,例如:

openxlsx::read.xlsx(paste0("C:/Users/my_user/Desktop/folder_name_including_non_English_characters_like_ıüö","/test.xlsx"))

它给出了以下错误。 (顺便说一句,openxlsx::read.xlsx() 函数成功地从只包含英文字符的目录中读取文件。

Error in file(con, "r") : invalid 'description' argument
In addition: Warning message:
In unzip(xlsxFile, exdir = xmlDir) : error 1 in extracting from zip file

我怀疑函数 list.files() 失败的原因和使用 openxlsx::read.xlsx() 函数的错误可能是相同的。

我的问题是:我应该更改哪些设置才能使 R 成功识别包含非英文字符的目录?

【问题讨论】:

  • setwd 之后,执行getwd 以检查当前是否设置了工作目录。如果没有,请尝试删除非英语单词中的勾号。
  • 它设置工作目录没有任何错误信息。 setwd("C:/Users/my_user/Desktop/folder_name_including_non_english_characters_like_ıüö") > getwd() "C:/Users/my_user/Desktop/folder_name_including_non_english_characters_like_ıüö"
  • 尝试使用 Sys.setlocale(locale = "your_language") 更改您的 R 会话系统语言。
  • 感谢您的建议;它已经设置: Sys.getlocale() "LC_COLLATE=Turkish_Turkey.1254;LC_CTYPE=Turkish_Turkey.1254;LC_MONETARY=Turkish_Turkey.1254;LC_NUMERIC=C;LC_TIME=Turkish_Turkey.1254" 。还有其他建议吗?

标签: r path character non-english


【解决方案1】:

在敲了我几个小时之后,Sys.glob(*.*)list.files 失败时唯一可能的选择。

> Sys.setlocale(locale = 'Turkish_Turkey.1254')
[1] "LC_COLLATE=Turkish_Turkey.1254;LC_CTYPE=Turkish_Turkey.1254;LC_MONETARY=Turkish_Turkey.1254;LC_NUMERIC=C;LC_TIME=Turkish_Turkey.1254"
> setwd('C:/Users/SA31/non_english_characters_like_ıüö')
> list.files()
character(0)
> Sys.glob('*.*')
[1] "New Text Document.txt"

没有setwd的更新代码:

> Sys.glob('C:/Users/SA31/non_english_characters_like_ıüö/*')
[1] "C:/Users/SA31/non_english_characters_like_ıüö/New Text Document.txt"
[2] "C:/Users/SA31/non_english_characters_like_ıüö/New folder"

【讨论】:

  • 谢谢,它工作正常。我想知道是否可以通过将与预定义工作目录不同的目录传递给 Sys.glob() 来使用它。如果不是,这意味着当我们要从不同目录读取数据时,需要连续使用 setwd()。
  • 请查看更新后的代码,可以使用paste0构建这样的路径
  • 如果您能告诉我们这是否是您所期望的答案,那就太好了!
  • 好的,我会尽快尝试并通知您。
  • amrrs,再次感谢您为此付出的努力。您的最后一个建议是打印这些有问题的目录中的文件的好方法。但是,似乎我需要一个解决方案来修复我的 R 或 Windows 环境中的必要设置。请查看主要问题的更新。
【解决方案2】:

将非 unicode 程序的系统区域设置更改为土耳其语解决了该问题。 “所有控制面板项目”>“区域和语言”>“管理”>“更改系统区域设置”

【讨论】:

    猜你喜欢
    • 2012-02-23
    • 2016-09-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-19
    相关资源
    最近更新 更多