我想将格式化的图例文本存储在数组中。
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()
不幸的是,这不起作用,我想知道如何将这些元素存储在数组中,......
答案 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.list
和as.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。