我有一个关于将变量名称转换为字符串以用作x轴名称的问题。
我试图应用deparse(substitute(input)),但是不幸的是,当我在另一个函数中调用此函数时,它不能很好地工作。
plot_CI <- function(input){
nm <- deparse(substitute(input))
if (substring(nm,1,1) == 'u') {
prior <- 'uniform'
} else if ((substring(nm,1,1) == 'l')) {
prior <- 'logit_Normal'
} else {
prior <- paste(strsplit(nm,"_")[[1]][1:2],collapse="_")
}
plot <- ggplot(temp_data, aes(x = x, y = mean)) +
geom_point(size = 2) +
geom_errorbar(aes(ymax = high, ymin = low)) +
geom_hline(yintercept = true_value, col = 'blue') +
labs(x=prior, y='value')
return(plot)
}
sen_plot <- function(variable){
# variable <- deparse(substitute(var))
file_name <- paste0('C:/Users/Qiangsuper/Dropbox/Papers/1/plot/sensitivity_', variable, '.png')
png(filename = file_name, width = 1000, height = 400)
p1 <- plot_CI(eval(parse(text = paste0('uniform_', variable))))
p2 <- plot_CI(eval(parse(text = paste0('logitN_', variable))))
multiplot(p1,p2,cols=2)
dev.off()
}
for (i in c("beta_1", "beta_2", "beta_3", "phi", "p", "delta")) {
sen_plot(i)
}
我希望'uniform'作为X轴名称,但是,我只收到eval(parse(text = paste0('Uniform_',variable))))。 非常感谢您的帮助。
我认为我应该使问题更简洁。这是一个容易理解的场景。
uniform_beta_1是一个数据框或数据表,用于存储我的结果。我尝试开发一种自动绘图算法,该算法将自动识别我应用的先前分布,并使用该先前分布命名X轴。对于Uniform_beta_1,先验分布是统一的,那么X轴的名称将是统一的。这是我尝试做的事情:
input <- uniform_beta_1
nm <- deparse(substitute(input))
然后应用substring命令来判断先前的分配。但是,在这种情况下,nm将返回“输入”而不是“ uniform_beta_1”。我想知道是否有任何方法可以返回“ uniform_beta_1”。
非常感谢您的帮助。
答案 0 :(得分:0)
我的问题的最终解决方案是,我从一开始就创建一个列表,并将所有这些字符串存储到该列表中,以避免在函数中进行转换。