无法使用rpart.plot添加希腊/数学/表达式拆分标签

时间:2018-11-30 15:08:54

标签: r rpart

我正在尝试绘制一个rpart树,在该树中我想将某些拆分标签更改为其等效的希腊/数学。例如,我有一列名为mu的列-我希望将其显示为希腊字母$ \ mu $。

不幸的是,当我替换其中一个标签时,它导致错误“ strsplit(labs,“ \ n \ n”)中的错误:非字符参数”。由于我没有使用strsplit,因此该错误一定是来自rpart.plot调用,它假定标签均为纯文本。这是我的代码:

split.fun <- function(x, labs, digits, varlen, faclen)
{
for(i in 1:length(labs)) {
    if(substring(labs[i],0,2)=="mu"){
      #labs[i] <- bquote(mu ~ .(substring(labs[i],3)))
      labs[i] <- expression(paste0(mu,substring(labs[i],3)))
    }
    print(labs[i])
    }
    labs
}
data$dv <- factor(data$dv, labels = c("No", "Yes"))
fit <- rpart(dv ~ n + alpha + dev + mu, method="class", data=data)
rpart.plot(fit, yesno=2, box.palette = 0, extra=100, under = TRUE, split.fun = split.fun)

“表达式”方法或“ bquote”方法均无效。但是,只要我将子字符串替换为其他字符串(而不是表达式),split.fun函数就可以正常工作。

在试图找出问题所在时,我也一直在打印出结果标签。这就是我得到的:

[1] "root"
[1] "dev >= 0.075"
expression(paste0(mu, substring(labs[i], 3)))
expression(paste0(mu, substring(labs[i], 3)))
expression("alpha < 0.025")
expression("alpha >= 0.025")
expression("dev < 0.075")
expression("alpha < 0.025")
expression("dev >= 0.025")
expression(paste0(mu, substring(labs[i], 3)))
expression(paste0(mu, substring(labs[i], 3)))
expression("dev < 0.025")
expression("alpha >= 0.025")

由此看来,一旦我将一个标签替换为一个表达式,所有其他标签都将替换为一个表达式。

是否存在另一种在rpart.plot上放置希腊字母的方法?还是rpart.plot(或一般来说是prp),根本不能包含数学表达式?

1 个答案:

答案 0 :(得分:0)

@ G5W的建议和字体可以组合使用。对于那些尝试这样做的人,请将以下内容添加到文件顶部:

ComboBox[] MyList = new ComboBox[3];
for (int i = 0; i < 3; i++)
{
    MyList[i] = new ComboBox();
    MyList[i].Width = 120;
    MyList[i].Height = 30;
    etc...
}

然后调整rpart.plot调用以使用“ Arial Unicode MS”。该字体似乎总是正确显示数学unicode字符(包括组合字符)。

library(extrafont)
loadfonts()