如何更改列名称以符合 mlr3 的命名约定

问题描述

我想使用许多(> 50K)标记作为特征名称来执行文本分类。然而,Task() 中的 mlr3 函数不允许在列名中包含太多字符,这些字符由 make.names 传递,否则没有问题。以下是我目前找到的列表:

  mutate(token=str_replace(token,"à","a")) %>% 
    mutate(token=str_replace(token,"ã","a")) %>%  
    mutate(token=str_replace(token,"á","ø","o")) %>%
    mutate(token=str_replace(token,"ç","c")) %>%
    mutate(token=str_replace(token,"ô","é","e")) %>% 
    mutate(token=str_replace(token,"e")) %>%   
    mutate(token=str_replace(token,"í","i")) %>% 
    mutate(token=str_replace(token,"î","è","ë","å","â","æ","ñ","n")) %>%  

如何使我的 data.frame 与 mlr3 兼容,而无需以这种方式手动替换所有特殊字符(反复试验)? make.names() 显然不起作用!

我非常感谢您的帮助:) 谢谢!

解决方法

一种方法是使用 janitor::clean_names()

d <- data.frame(`süßigkeit` = 1:3,`straße` = 1:3,`Hellö` = 1:3,`séé` = 1:3)
janitor::clean_names(d)
#>   sussigkeit strasse hello see
#> 1          1       1     1   1
#> 2          2       2     2   2
#> 3          3       3     3   3

reprex package (v0.3.0) 于 2021 年 1 月 11 日创建

如果您正在处理向量,而不是 data.frame 的名称,则可以使用底层函数 janitor::make_clean_names() :

make_clean_names("süßigkeit")
[1] "sussigkeit"
,

使用 janitor 包是一种选择。 Base R 还带有(不太复杂的)函数 make.names(names,unique = TRUE),它也可以正常工作。

如果您确实需要保留原始名称,可以将实验选项 "mlr3.allow_utf8_names" 设置为 TRUE,但请注意,这可能会打扰一些学习者。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...