R 列名称中的破折号表示“;“未找到对象”;错误
我有一个从数据生成散点图的函数,其中提供了一个参数来选择要使用哪个列为点着色。以下是一个简化版本:R 列名称中的破折号表示“;“未找到对象”;错误,r,dataframe,ggplot2,aesthetics,R,Dataframe,Ggplot2,Aesthetics,我有一个从数据生成散点图的函数,其中提供了一个参数来选择要使用哪个列为点着色。以下是一个简化版本: library(ggplot2) plot_gene <- function (df, gene) { ggplot(df, aes(x, y)) + geom_point(aes_string(col = gene)) + scale_color_gradient() } 似乎正在解析基因变量(“H2-Aa”变为H2-Aa)。我怎样才能避开这件事?是否有方法
library(ggplot2)
plot_gene <- function (df, gene) {
ggplot(df, aes(x, y)) +
geom_point(aes_string(col = gene)) +
scale_color_gradient()
}
似乎正在解析基因
变量(“H2-Aa”
变为H2-Aa
)。我怎样才能避开这件事?是否有方法指示字符串不应在aes_string
中通过eval
可复制输入
如果您需要一些输入来处理,则会像我的数据一样失败:
df <- data.frame(c(1,2), c(2,1), c(1,2), c(2,1))
colnames(df) <- c("x", "y", "Gapdh", "H2-Aa")
df通常R会尽力确保data.frame中的列名可以是有效的变量名。在使用使用非标准求值类型语法的函数时,使用非标准列名(不是有效变量名的列名)会导致问题。当你专注于使用这些变量名时,你经常需要把它们包装在后面的记号中。在正常情况下
ggplot(df, aes(x, y)) +
geom_point(aes(col = H2-Aa)) +
scale_color_gradient()
# Error in FUN(X[[i]], ...) : object 'H2' not found
将返回一个错误,但
ggplot(df, aes(x, y)) +
geom_point(aes(col = `H2-Aa`)) +
scale_color_gradient()
会有用的
如果你真的愿意,你可以粘贴背景标记
geom_point(aes_string(col = paste0("`", gene, "`")))
或者你也可以把它当作一个符号来使用aes\u q
instread
geom_point(aes_q(col = as.name(gene)))
最新版本的ggplot
支持通过转义
而不是使用aes\u string
或aes\u q
,这样您就可以
geom_point(aes(col = !!rlang::sym(gene)))
即使是像colnames(test)这样的命令,您也可以将它们设置为您想要的任何值,但是当通过read.table
导入数据时,它们会被正确重命名(除非您禁用)。我们应该仔细考虑非标准列名是否真的值得所有额外的麻烦。我确实使用了<代码>阅读>表>代码>,没有其他参数比<代码>标题=真< /代码>。它没有像你建议的那样清理我的列名。哇。我发现这非常令人惊讶。您确定没有设置check.names=FALSE
或以其他方式重命名它们吗?如果我运行read.table(text=“a-b,c\n1,2”,header=T,sep=“,”)
我看到-
变成了
以下是我导入数据的步骤:
geom_point(aes(col = !!rlang::sym(gene)))