WinXP-x32,R-2.13.0
亲爱的名单,
我有一个问题(我认为)与Windows和R之间的交互有关。
我正试图用夏威夷群岛上的数据搜集一张桌子。这是我的R代码:
library(XML)
u <- "http://en.wikipedia.org/wiki/Hawaii"
tables <- readHTMLTable(u)
Islands <- tables[[5]]
输出是(第一组列):
Island Nickname > > Islands Island Nickname > > Location 1 Hawaiʻi[7] The Big
岛屿19°34°N 155°30°W/ 19.567°N 155.5°W/ 19.567; -155.5 2 Maui [8] The Valley Isle20°48°N 156°20°W/ 20.8°N 156.333°W/ 20.8; -156.3333KahoÊ»olawe [9]目标岛20°33°N 156°36°W/20.55°N 156.6°W/ 20.55; -156.64LÄnaÊ»i [10]菠萝岛 20°50°N 156°56°W/ 20.833°N 156.933°W/ 20.833; -156.9335MolokaÊ»i [11]友好岛屿21°08°N 157°02°W/21.133°N 157.033°W/ 21.133; -157.033 6Ê»ahu [12]聚会场所 21°28°N 157°59°W/ 21.467°N 157.983°W/ 21.467; -157.983 7KauaÊ»i [13]花园小岛22°05°N 159°30°W/22.083°N 159.5°W/ 22.083; -159.5 8NiÊ»ihau [14] The Forbidden Isle
21°54°N 160°10°W/21.9°N 160.167°W/ 21.9; -160.167
正如你所看到的,那里有“怪异”的角色。我还尝试了readHTMLTable(u, encoding = "UTF-16")
和readHTMLTable(u, encoding = "UTF-8")
但这没有帮助。
在我看来,字符集的Windows设置与R的交互可能存在问题。
sessionInfo()
给出了
> sessionInfo()
R version 2.13.0 (2011-04-13)
Platform: i386-pc-mingw32/i386 (32-bit)
locale:
[1] LC_COLLATE=Dutch_Netherlands.1252 LC_CTYPE=Dutch_Netherlands.1252 LC_MONETARY=Dutch_Netherlands.1252
[4] LC_NUMERIC=C LC_TIME=Dutch_Netherlands.1252
attached base packages:
[1] stats graphics grDevices utils datasets methods base
other attached packages:
[1] XML_3.2-0.2
我还试图通过输入:Sys.setlocale("LC_ALL", "en_US.UTF-8")
让R使用其他设置,但这会产生响应:
> Sys.setlocale("LC_ALL", "en_US.UTF-8")
[1] ""
Warning message:
In Sys.setlocale("LC_ALL", "en_US.UTF-8") :
OS reports request to set locale to "en_US.UTF-8" cannot be honored
此外,我试图直接从Windows命令提示符进行更改,使用:chcp 65001
及其变体,但这并没有改变任何内容。
我在搜索网络时注意到其他人也有问题,但一直未能找到解决方案。我认为这是Windows和R如何交互的问题。不幸的是,我所有的三台计算机都有这个问题。它出现在WinXP-x32和Win7-x86下。
有没有办法让R覆盖窗口设置,否则问题可以解决? 我也尝试过其他网站,每当有待删除的文本中有é,ü,ä,î等等时就会出现问题。
谢谢你, 罗杰
答案 0 :(得分:1)
答案不是很好:
如果您查看维基百科页面并将浏览器中的编码(在IE中,查看 - &gt;编码;在Firefox中,查看 - &gt;字符编码)更改为Western(ISO-8869-1)或Western(Windows) -1252)然后你看到愚蠢的角色。这应该意味着您可以使用iconv
来更改编码并解决问题。
#Convert factors to character
Islands <- as.data.frame(lapply(Islands, as.character), stringsAsFactors = FALSE)
iconv(Islands$Island, "windows-1252", "UTF-8")
不幸的是,它不起作用。可以通过使用不同的转换来获取正确的文本(iconvlist()
显示所有可能性)。
它可能只是删除有问题的字符,但这并不理想。
iconv(Islands$Island, "windows-1252", "ASCII", "")
答案 1 :(得分:0)
无法复制错误,但查看帮助文件很有用。
Sys.setlocale("LC_TIME", "de") # Solaris: details are OS-dependent
Sys.setlocale("LC_TIME", "de_DE.utf8") # Modern Linux etc.
Sys.setlocale("LC_TIME", "de_DE.UTF-8") # ditto
Sys.setlocale("LC_TIME", "de_DE") # OS X, in UTF-8
Sys.setlocale("LC_TIME", "German") # Windows
对于Windows,您应该使用“English”或“Dutch_Netherlands.1252”等格式来更改这些设置。
我试图复制你的状态
> Sys.setlocale("LC_ALL","Dutch_Netherlands.1252")
[1] "LC_COLLATE=Dutch_Netherlands.1252;LC_CTYPE=Dutch_Netherlands.1252;LC_MONETARY=Dutch_Netherlands.1252;LC_NUMERIC=C;LC_TIME=Dutch_Netherlands.1252"
> Sys.getlocale()
[1] "LC_COLLATE=Dutch_Netherlands.1252;LC_CTYPE=Dutch_Netherlands.1252;LC_MONETARY=Dutch_Netherlands.1252;LC_NUMERIC=C;LC_TIME=Dutch_Netherlands.1252"
library(XML)
u <- "http://en.wikipedia.org/wiki/Hawaii"
tables <- readHTMLTable(u)
Islands <- tables[[5]]
但是我没有在控制台中获得有趣的角色,在我自己的语言环境中'被标记为,但仍然保留所有功能。
> Islands[1,1]
[1] Hawaiʻi[27]
8 Levels: Hawaiʻi[27] Kahoʻolawe[34] Kauaʻi[30] Lānaʻi[32] Maui[28] ... Oʻahu[29]
这些有趣的角色可以轻松阅读,并从表中找到。
> Encoding(as.character("Hawaiʻi"))
[1] "UTF-8"
> Encoding(as.character(Islands[1,1]))
[1] "UTF-8"
> grep("Hawaiʻi", as.character(Islands[1,1]))
[1] 1
如果你仍然有问题,它会依赖其他地方,但是要更改windows下的语言环境,你必须使用与Linux或OS X不同的名称(例如,参见你自己的语言环境信息)。在Windows中,“荷兰语”可能就足够了。