如何在R中生成一个“语言”对象数组?

时间:2013-03-07 13:19:08

标签: arrays r types legend

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

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()

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

2 个答案:

答案 0 :(得分: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.listas.call转换为列表和从列表转换。因此,可以修改一个bove的解决方案:

> 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

答案 1 :(得分:1)

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

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

我不知道你的传奇是否真的需要这个os。