Имя переменной в строки, R

#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:

Окончательное решение моего вопроса заключается в том, что я создаю список в самом начале и сохраняю все эти строки в этом списке, чтобы избежать преобразования в функции.