使用data.table
的merge
函数时,我遇到了编码警告。我的步骤如下:
- 创建第一个
data.table
- 使用
merge
更新此data.table
但是当我调用merge
时,会出现以下警告:
Please ensure that character columns have identical encodings for joins.
我该如何告诉data.table所使用的编码方式?我知道可以使用suppressWarnings
来解决警告问题,但我更倾向于以一种规范的方式进行修复。
以下代码是该警告的再现:
library(data.table)
options(stringsAsFactors=FALSE)
dt = data.table(text=c('é','à','s'),
title='agstudy',hrefs='a')
setkeyv(dt,names(dt))
dt.new = data.table(text=c('é','à','h','a'),
hrefs=c(rep('a',2),rep('aa',2)),
title=c(rep('agstudy',2),rep('new',2)))
setkeyv(dt.new,names(dt.new))
merge(dt.new,dt,all=TRUE)
Warning messages:
1: In `[.data.table`(y, xkey, nomatch = ifelse(all.x, NA, 0), allow.cartesian = allow.cartesian) :
Encoding of character column 'text' in X is different from column 'text' in Y
in join X[Y]. Joins are not implemented yet for non-identical character encodings
and therefore likely to contain unexpected results for those entries.
Please ensure that character columns have identical encodings for joins.
编辑 添加一些会话信息:
sessionInfo()
R version 3.0.2 (2013-09-25)
Platform: x86_64-w64-mingw32/x64 (64-bit)
[1] data.table_1.8.11
EDIT2 添加一些背景信息
在某些抓取操作之后,我的data.table是通过设置编码为UTF-8
来创建的(使用htmlParse(...,encoding='UTF-8')),然后我使用抓取到的文本创建了这个data.table。
Encoding(dt$text)
给你什么结果?我得到的是"unknown" "latin1" "latin1"
,我的脚本是用RStudio保存的UTF-8编码。 - VictorpEncoding(dt[[1]])
是[1] "latin1" "latin1" "unknown"
,即存在混合编码。但是根据文档:“ASCII字符串永远不会被标记为已声明的编码,因为它们在所有支持的编码中的表示都是相同的。”所以,我看不到避免警告的方法。 - RolandEncoding("é")
返回[1] "latin1"
。 - Roland