#r
#r
Вопрос:
У меня есть вопрос о преобразовании имени переменной в строки для работы в качестве имени оси 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_’, переменная))) .
Большое вам спасибо за вашу помощь.
- ОБНОВЛЕНИЕ ПО ВОПРОСУ:
Я думаю, я должен сделать вопрос более кратким. Вот простой для понимания сценарий.
uniform_beta_1 — это фрейм данных или таблица данных, в которой хранятся мои результаты. Я пытаюсь разработать алгоритм автоматического построения графика, который автоматически определит, какое предыдущее распределение я применил, и назовет ось X этим предыдущим распределением. Для uniform_beta_1 предыдущее распределение является равномерным, тогда имя оси X будет равномерным. Вот что я пытаюсь сделать:
input <- uniform_beta_1
nm <- deparse(substitute(input))
Затем примените команду substring, чтобы оценить предыдущее распределение. Однако в этом случае nm вернет ‘input’, а не ‘uniform_beta_1’. Мне интересно, могу ли я каким-либо образом вернуть ‘uniform_beta_1’.
Большое вам спасибо за вашу помощь.
Комментарии:
1. Не могли бы вы объяснить, что вы пытаетесь сделать ?! В противном случае взгляните на CodeReview .
2. Вы пробовали
colnames()
илиnames()
?3. Спасибо, @NelsonGon. Я обновляю свой вопрос, и, надеюсь, теперь его легче понять.
4. Спасибо, @ANG. Я хотел бы получить имя того, что обозначает эта переменная. Я выражаю более подробно в обновленном вопросе.
Ответ №1:
Окончательное решение моего вопроса заключается в том, что я создаю список в самом начале и сохраняю все эти строки в этом списке, чтобы избежать преобразования в функции.