R 使用 ggplot2: "Error in value == "primary": 表达式不允许比较"

R using ggplot2: "Error in value == "primary" : comparison is not allowed for expressions"

我正在尝试使用我创建的函数 facet_labeller:

使用 ggplot 更改 R 中可用的方便面图中的标签
#This function will map a new name to the category labels
facet_labeller <- function(var, value){
  value <- as.character(value)

  # Creates labels with superscript for 1st and 2nd solvation shells
  label_primary <- expression(1^{st} ~ Shell)
  label_secondary <- expression(2^{nd} ~ Shell)

  if (var=="solvent") {
    value[value=="meoh"] <- "Methanol"
    value[value=="water"]   <- "Water"
  }
  if (var=="shell") {
    value[value=="secondary"] <- label_secondary
    value[value=="primary"] <- label_primary
  }
  if (var=="ion") {
    value[value=="Cl"] <- "Cl"
    value[value=="Na"] <- "Na"
  }
  return(value)
}

当函数被facet_grid调用时:

facet_grid(shell + ion ~ solvent, scales="free_y", labeller=facet_labeller)

我收到错误 "Error in value == "primary":表达式不允许进行比较"

我完全不明白为什么会这样。更改错误引用的行将解决问题并允许创建情节;例如,我可以简单地注释掉该行,或者我可以放置一个字符串而不是 'label_primary' 变量。但是,由于上标,我需要使用表达式。

为什么会这样?为什么只在 if 块中检查一次就不会发生这种情况?我怎样才能让它工作?任何帮助将不胜感激 - 我完全不知所措。

错误原因:

函数调用开始时,value的元素都有class"character"。但是当你点击

    value[value=="secondary"] <- label_secondary

这些元素中的一些被 表达式替换了。 所以当你尝试做

    value[value=="primary"] <- label_primary

R 试图将某些 表达式 与字符串进行比较,但它不知道如何与表达式进行比较,所以它只是抱怨并停止工作。

如何解决:

尝试更换方块:

if (var=="shell") {
    value[value=="secondary"] <- label_secondary
    value[value=="primary"] <- label_primary
}

与:

if (var=="shell") {
    primary_values <- value=="primary"
    value[-primary_values] <- label_secondary
    value[primary_values] <- label_primary
}

这只会在任何内容发生更改之前检查每个元素一次,因此可以避免尝试与表达式进行比较。