1

我想将格式化的图例文本存储在一个数组中。

normFactor= c(1e-1, 1e-2, 1e-3)

legend_text[1] = bquote(mu ~ "=" ~ .(normFactor[1]))
legend_text[2] = bquote(mu ~ "=" ~ .(normFactor[2]))
legend_text[3] = bquote(mu ~ "=" ~ .(normFactor[3]))

bquote-output 似乎是以下类型language

str(bquote(mu ~ "=" ~ .(normFactor[3])))

语言 mu ~ "=" ~ 0.001

所以我想我可以设置一组语言元素:

legend_text = language()

不幸的是,这不起作用,我想知道如何将这些元素存储在数组中,...

4

2 回答 2

2

您可以将它们存储在列表中,或者更好地创建它们,如下所示:

lapply(seq_along(normFactor),
         function(i)bquote(mu ~ "=" ~ .(normFactor[i])))

[[1]]
mu ~ "=" ~ 0.1

[[2]]
mu ~ "=" ~ 0.01

[[3]]
mu ~ "=" ~ 0.001

bquote创建语言对象实际上可以使用as.list和转换为列表或从列表转换as.call。因此,可以修改 above 的解决方案,例如:

> ll <- lapply(seq_along(normFactor),
+        function(i)as.list(bquote(mu ~ "=" ~ .(normFactor[i]))))
> str(ll)
List of 3
 $ :List of 3
  ..$ : symbol ~
  ..$ : language mu ~ "="
  ..$ : num 0.1
 $ :List of 3
  ..$ : symbol ~
  ..$ : language mu ~ "="
  ..$ : num 0.01
 $ :List of 3
  ..$ : symbol ~
  ..$ : language mu ~ "="
  ..$ : num 0.001

然后将结果强制到调用列表:

> lapply(ll,as.call)
[[1]]
mu ~ "=" ~ 0.1

[[2]]
mu ~ "=" ~ 0.01

[[3]]
mu ~ "=" ~ 0.001
于 2013-03-07T14:17:31.707 回答
1

语言不是原子数据类型,因此结果将是一个列表而不是一个向量。动态类型是你的朋友:

legend_text<- c(
 bquote(mu ~ "=" ~ .(normFactor[1])),
 bquote(mu ~ "=" ~ .(normFactor[2])),
 bquote(mu ~ "=" ~ .(normFactor[3]))
)

不过,我不知道这是否是您的传奇真正需要的操作系统。

于 2013-03-07T13:56:21.500 回答