R 如何更改h2o数据框列名的接受语言设置
我用H2O和R来解决二元分类问题。 该数据集有800多个功能,其中一些功能包括非英语名称和字符,例如“ö” 我收到以下错误消息:R 如何更改h2o数据框列名的接受语言设置,r,h2o,R,H2o,我用H2O和R来解决二元分类问题。 该数据集有800多个功能,其中一些功能包括非英语名称和字符,例如“ö” 我收到以下错误消息: Error in .verify_dataxy(params$training_frame, x, y): Invalid column names 然后显示包含问题字符的列列表 我已经在谷歌上搜索了一份关于H2O中可接受语言设置的文档 下面是一个示例代码: library(h2o) h2o.init() sodata <- data.frame(Erklär
Error in .verify_dataxy(params$training_frame, x, y): Invalid column names
然后显示包含问题字符的列列表
我已经在谷歌上搜索了一份关于H2O中可接受语言设置的文档
下面是一个示例代码:
library(h2o)
h2o.init()
sodata <- data.frame(Erklärung = sample(c(0,1), 50, replace = TRUE),
isPot = sample(c(0,1), 50, replace = TRUE),
target = sample(c(0,1), 50, replace = TRUE))
#
tar <- "target"
pr <- setdiff(colnames(sodata), tar)
sohex <- as.h2o(sodata)
spl <- h2o.splitFrame(data = sohex, ratios = .7, seed = 1)
training <- spl[[1]]
testing <- spl[[2]]
#
gbm1 <- h2o.gbm(x = pr,
y = tar,
training_frame = training,
validation_frame = testing)
#
#h2o.shutdown()
有没有办法改变H2O中的接受语言
编辑:会话和环境信息
sessionInfo()
R version 3.5.1 (2018-07-02)
Platform: x86_64_w64-mingw32/x64 (64-bit)
Running under: Windows 7 x64 (build 7601) Service Pack 1
Matrix products: default
locale:
[1] LC_COLLATE=German_Germany.1252 LC_CTYPE=German_Germany.1252 LC_MONETARY=German_Germany.1252 LC_NUMERIC=C
[5] LC_TIME=German_Germany.1252
在
Sys.getenv()
之后显示的设置下,没有与语言相关的内容 根据您的更新进行编辑:您看到的“.1252”不是Unicode。看
显示了更改R的区域设置的一些方法。(如果不希望每次都在R中设置默认区域设置,您可能还需要研究设置mingw的默认区域设置的方法。)
我将在下面粘贴我的sessionInfo输出,但我认为在每个输出末尾显示.UTF-8
的任何内容都可以,例如“de_de.UTF-8”
顺便说一句,一个解决办法是去掉特殊字符,看看有几种方法可以做到这一点。例如
sodata <- ...
...
colnames(sodata) <- iconv(colnames(sodata),to="ASCII//TRANSLIT")
sohex <- as.h2o(sodata)
...
我猜你需要确保你的脚本是UTF-8。也许可以检查运行R会话的区域设置
My sessionInfo()(从命令行在RStudio;R中运行时具有相同的区域设置):
谢谢你的回答。编辑了我的帖子并添加了区域设置。我在运行
h2o.gbm
后立即发现了错误。(或h2o.grid
)。编码为UTF-8。不幸的是,我处于一个高度规范的环境中,无法编辑/更改.Rprofile或系统设置,因为我缺乏管理权限。Sys.setlocale()不允许我进行更改。Sys.setenv(LANG)可以工作,但不会更改区域设置中的任何内容。如果有任何特定于h2o包的设置允许在列名中使用umlaut,这就是我想要做的。(正常会话,data.table
或data.frame
使用这些列名。)@maop您可以尝试从命令行启动h2o,而不是使用h2o.init()
。或者,如果在Sys.setenv()
调用之后调用h2o.init()
,它是否工作?但我也会尝试说服您的系统管理员接受UTF8/Unicode,并从20世纪的编码开始:-)说服系统管理员是一个好建议:)在确保调用setenv()后,我尝试初始化h2o。我有点放弃了,使用setnames()
更改了列名,并指定了如下新名称:paste0(“v”,seq(1,长度(预测值),1))
。
sodata <- ...
...
colnames(sodata) <- iconv(colnames(sodata),to="ASCII//TRANSLIT")
sohex <- as.h2o(sodata)
...
variable relative_importance scaled_importance percentage
1 isPot 0.676265 1.000000 0.708690
2 Erklärung 0.277981 0.411054 0.291310
> sessionInfo()
R version 3.4.4 (2018-03-15)
Platform: x86_64-pc-linux-gnu (64-bit)
Running under: Linux Mint 19.1
Matrix products: default
BLAS: /usr/lib/x86_64-linux-gnu/blas/libblas.so.3.7.1
LAPACK: /usr/lib/x86_64-linux-gnu/lapack/liblapack.so.3.7.1
locale:
[1] LC_CTYPE=en_GB.UTF-8 LC_NUMERIC=C LC_TIME=en_GB.UTF-8 LC_COLLATE=en_GB.UTF-8 LC_MONETARY=en_GB.UTF-8
[6] LC_MESSAGES=en_GB.UTF-8 LC_PAPER=en_GB.UTF-8 LC_NAME=C LC_ADDRESS=C LC_TELEPHONE=C
[11] LC_MEASUREMENT=en_GB.UTF-8 LC_IDENTIFICATION=C
attached base packages:
[1] stats graphics grDevices utils datasets methods base
loaded via a namespace (and not attached):
[1] compiler_3.4.4 tools_3.4.4