【问题标题】:How to index Greek symbols in R expression如何在 R 表达式中索引希腊符号
【发布时间】:2023-04-06 04:48:02
【问题描述】:

这是一个简单的例子:

ylab<-expression(paste(beta, "/ml"))
plot(1:10, ylab=ylab)

但如果我使用另一个变量来索引 beta:

unit<-beta
ylab<-expression(paste(unit, "/ml"))
plot(1:10, ylab=ylab)

我的问题是如何在 R 表达式中索引这些希腊符号?

【问题讨论】:

  • 如果您在后三个命令中没有收到错误,则表示您的工作区中有一个名为 beta 的数据对象。您是否真的尝试在刻度线处创建文本标签?否则我看不到任何我称之为“索引”的东西。
  • @42- 不一定是因为 beta 是 base 中的基本函数;所以不会出错
  • 哦,对了。但 OP 似乎不太可能真正想要创建一个名为 unit 的函数,它需要两个参数。我仍然要求澄清目标。
  • 请参阅stackoverflow.com/questions/4973898/… 了解与pasteexpression 相关的问题
  • @42,你能在最后重现这个问题吗?如果不是,也许问题出在我当地。

标签: r


【解决方案1】:

更新:似乎希望将表达式外部的变量传递到在 plot 调用之外构造的表达式类变量。这似乎比使用eval(parse(text=paste( ... )) 构造简单得多:

unit=quote(beta)
ylab<-bquote(.(unit)/ml)
plot(1:10, ylab=ylab)

这里说明的教训是使用quote 来防止对符号求值,然后对表达式中的名称求值。

也可以使用as.nameas.symbol

 unit=as.name('beta')

回答我最初怀疑的问题,因为这是一个(实际上是两个)我在 R 的早期阶段一直在努力解决的问题。我猜你想要构建刻度标签而不是轴标签,并且你想要这些显示为希腊字母或其他plotmath-y 结构,但用升序的“索引”值代替。第二个请求需要使用substitutebquote,而第一个请求需要记住使用par 参数抑制y 轴刻度和标签,然后使用axis

plot(1:10, ylab=ylab,yaxt="n")
# Now create "horizontally aligned" (using las=2)  beta-value tick labels
axis(2, at=1:10, 
        labels=as.expression(lapply( 1:10, function(x) bquote( beta == .(x)))) ,
        las=2)

as.expression 围绕 bquote-ed-results 列表的包装器是我在较早的答案(由我)中找到的,我想只是标记为重复,但它不涉及任何绘图,所以我决定将其视为“部分重叠”。

【讨论】:

  • 我喜欢为此使用quotebquote。当unit 是符号向量时,您如何修改? (例如,beta、mu、phi)
  • unit &lt;- expression(beta, alpha, mu) ; as.expression(lapply( 1:3, function(x) bquote( .(unit[[x]]) == .(x)))) 返回:表达式(beta == 1L, alpha == 2L, mu == 3L)
【解决方案2】:

首先beta 应该用双引号引起来,所以它是一个字符串而不是基本函数,正如@42 所指出的那样-

否则,您似乎可以将一个字符串粘贴在一起,然后像这样评估它

unit<-"beta" #note double quotes
txt <- paste0("expression(",unit,"~'/ml')") #built expression as string
ylab<-eval(parse(text=txt)) #evaluate the expression with parse
plot(1:10, ylab=ylab)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-01-13
    • 2016-12-28
    • 2017-04-23
    • 2011-01-30
    • 2011-07-14
    • 1970-01-01
    • 1970-01-01
    • 2020-10-16
    相关资源
    最近更新 更多