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
}
这只会在任何内容发生更改之前检查每个元素一次,因此可以避免尝试与表达式进行比较。
我正在尝试使用我创建的函数 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
}
这只会在任何内容发生更改之前检查每个元素一次,因此可以避免尝试与表达式进行比较。