【问题标题】:How to show greek letters as the rownames of a matrix如何将希腊字母显示为矩阵的行名
【发布时间】:2015-03-15 17:20:28
【问题描述】:

我想知道如何在 R 中设置包含希腊字母表达式的矩阵的行名。我使用“表达式”,但它似乎不起作用。下面是我的代码。

b.summary = matrix(0, 8, 6)
colnames(b.summary)= c("Min.", "1st Qu.", "Median", "Mean","3rd Qu", "Max." )
rownames(b.summary)= c(expression(paste(tau, "=1", sep="")),expression(paste(sigma^2, "=1", sep="")), expression(paste(tau, "=5",sep="")), expression(paste(sigma^2, "=0.2",sep="")), expression(paste(tau, "=16", sep="")), expression(paste(sigma^2, "=0.0625",sep="")), expression(paste(tau, "1/2.25", sep="")),expression( paste(sigma^2, "=2.25", sep="")) )

当我输入 b.summary 时,显示的行名如下:

paste(tau, "=1", sep = "")

而不是乳胶表达式。

我想要希腊字母的原因是我正在使用 knitr 创建一个动态文档。我想直接显示该矩阵的结果,而不是使用 \Sexpr{} 表达式手动键入矩阵的所有元素来创建表。 knitr 中完整的代码块是

<<coverage.b.summary, eval=TRUE, echo=FALSE>>=
 b.summary = matrix(runif(48), 8, 6)
 colnames(b.summary)= c("Min.", "1st Qu.", "Median", "Mean","3rd Qu", "Max." )
rownames(b.summary)= labels(expression(paste(tau, "=1",     sep="")),expression(paste(sigma^2, "=1", sep="")), expression(paste(tau, "=5",sep="")), expression(paste(sigma^2, "=0.2",sep="")), expression(paste(tau, "=16", sep="")), expression(paste(sigma^2, "=0.0625",sep="")), expression(paste(tau, "=1/2.25", sep="")),expression( paste(sigma^2, "=2.25", sep="")) )
b.summary
@

提前感谢您的帮助!

【问题讨论】:

  • 我不确定你会如何表示像 sigma squared 这样的东西,但this question 的公认答案在很大程度上可能会有所帮助。
  • 使用矩阵对象有严格的限制,其中之一是行名是字符向量。这些表达式被强制转换为字符向量。最好解释一下这项工作的目标,然后找到限制较少的数据结构。本机 R 中没有 LaTex 表示的概念,因此您需要提前考虑将使用该数据对象的哪种用途。此外,绘图形式的粘贴函数没有“sep”参数。
  • 我明白了!非常感谢您提供的信息和建议。然后我将解释这项工作的目标!
  • 那么我认为你应该使用paste(但不是expression)自己构建行名,并且你应该使用@nrussell 提供的提示来生成希腊字母。

标签: r knitr


【解决方案1】:

这是在使用矩阵的约束下我能做的最好的事情。行名不能是 R expression 分类对象。我正在构建一个名为“greeks”的命名向量,并使用名称从中提取 Unicode 值,然后使用参数回收来用 tau 和 sigma^2 标记交替行。 (无法使用表达式意味着矩阵行名中不能有下标。)

greeks=c(alpha='\u03b1', tau='\u03c4', sigma='\u03c3',
                         beta='\u03b2',
                         gamma='\u03b3')

b.summary = matrix(0, 8, 6)
colnames(b.summary)= c("Min.", "1st Qu.", "Median", "Mean","3rd Qu", "Max." )
rownames(b.summary)= paste0(c( greeks['tau'], paste0(greeks['sigma'],"^2") ), 
                               c("=1","=1", "=5", "=0.2",
                                 "=16",  "=0.0625", "=2.25", "=2.25") )

> b.summary
           Min. 1st Qu. Median Mean 3rd Qu Max.
τ=1           0       0      0    0      0    0
σ^2=1         0       0      0    0      0    0
τ=5           0       0      0    0      0    0
σ^2=0.2       0       0      0    0      0    0
τ=16          0       0      0    0      0    0
σ^2=0.0625    0       0      0    0      0    0
τ=2.25        0       0      0    0      0    0
σ^2=2.25      0       0      0    0      0    0

【讨论】:

    【解决方案2】:

    调整@42- 解决方案(这应该是注释,但答案具有更好的代码格式):

    greeks = c(alpha='\u03b1', tau='\u03c4', sigma='\u03c3', sigmaSq='\u03c3\u00B2', beta='\u03b2', gamma='\u03b3')
    b.summary = matrix(0, 8, 6)
    colnames(b.summary) = c("Min.", "1st Qu.", "Median", "Mean","3rd Qu", "Max.")
    p1 = c(greeks['tau'], greeks['sigmaSq'])
    p2 = c("1","1", "5", "0.2", "16",  "0.0625", "2.25", "2.25")
    rownames(b.summary) = paste(p1, p2, sep="=")
    b.summary
    

    产生以下内容

              Min. 1st Qu. Median Mean 3rd Qu Max.
    τ=1          0       0      0    0      0    0
    σ²=1         0       0      0    0      0    0
    τ=5          0       0      0    0      0    0
    σ²=0.2       0       0      0    0      0    0
    τ=16         0       0      0    0      0    0
    σ²=0.0625    0       0      0    0      0    0
    τ=2.25       0       0      0    0      0    0
    σ²=2.25      0       0      0    0      0    0
    

    在我的特定用例中,我正在编织一个“kable”方差膨胀因子和 s.d. mtcars 数据集的膨胀因子:

    cars.vif = rbind(
        t(vif(cars.model)[,1]),
        t(sqrt(vif(cars.model))[,1])
    )
    rownames(cars.vif) = c("\u03c3", "\u03c3\u00B2")
    kable(cars.vif)
    

    KnitR'ing 这需要 xelatex 和包含 σ 的字体,即 Arial

    【讨论】:

    • 另一种选择:对于 LaTeX 输出和 kable 的情况,LaTeX 语法可用于行名/列名:colnames(cars) &lt;- c("$\\nu$", "$\\delta$");knitr::kable(cars, escape = FALSE)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-08-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多