Невозможно добавить греческие / математические / выражения разделить метки, используя rpart.plot - PullRequest
0 голосов
/ 30 ноября 2018

Я пытаюсь построить дерево 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 голосов
/ 30 ноября 2018

Сочетание предложений и шрифтов для @ G5W.Для тех, кто пытается это сделать, добавьте следующее в начало файла:

library(extrafont)
loadfonts()

Затем настройте вызов rpart.plot для использования «Arial Unicode MS».Этот шрифт, кажется, всегда правильно отображает математические символы Юникода (включая комбинированные символы).

rpart.plot(fit, yesno=2, box.palette = 0, extra=100, under = TRUE, split.fun = split.fun, split.font=1, split.family="Arial Unicode MS", family="Arial Unicode MS")
...