首页 > 解决方案 > R 函数 bquote() 的元素数量与 expression() 不同

问题描述

假设我有一个这样的字符向量

vec <- c("a","b","c","d")

我想用表达式改变向量的第一个元素

num <- 3
vec[1] <- expression(num^4)

但是,如果我尝试x[1]在情节中使用标签

plot(x=1, xlab = vec[1])

我得到以下标签: 情节

有什么方法可以让标签读取 3 4?我做了一些研究,发现有些人建议使用该bquote()功能。但是当我尝试这个

num <- 3
vec[1] <- bquote(.(num)^4)

我收到错误消息

要替换的项目数不是替换长度的倍数

有没有办法让它bquote(.(num)^4)返回一个元素,就像函数一样expression()?或者是否有任何其他我可以使用的函数相当于expression(),但可以读取变量?

提前致谢!

标签: r

解决方案


您不能在向量中混合字符和表达式。请注意,您的第一段代码将所有代码都转换vec为表达式容器。观察

vec <- c("a","b","c","d")
class(vec)
# [1] "character"
vec[1] <- expression(num^4)
class(vec)
# [1] "expression"
vec
# expression(num^4, "b", "c", "d")

当您尝试执行不兼容的分配时,它会被强制转换为表达式容器对象。

使用表达式容器和列表一样,您需要使用双括号[[ ]]来设置值。你可以做

vec <- as.expression(c("a","b","c","d"))
num <- 3
vec[[1]] <- bquote(.(num)^4)
vec
# expression(3^4, "b", "c", "d")

推荐阅读