Имя переменной в строки, R - PullRequest
0 голосов
/ 11 апреля 2019

У меня есть вопрос о преобразовании имени переменной в строки для работы в качестве имени оси X.

Я пытался применить deparse (замещающий (входной)), но, к сожалению, он не работает, когда я вызывал эту функцию в другой функции.

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)
}

Я ожидаю, что в качестве имени оси X указано'iform ', однако я получил только eval (parse (text = paste0 (' Uniform_ ', variable))). enter image description here Большое спасибо за вашу помощь.

  • ОБНОВЛЕНИЕ О ВОПРОСЕ:

Думаю, мне следует сделать этот вопрос более лаконичным. Вот легко понятный сценарий.

iform_beta_1 - это фрейм данных или таблица данных, в которой хранятся мои результаты. Я пытаюсь разработать автоматический алгоритм построения графика, который будет автоматически определять, какое предыдущее распределение я применил, и назову ось X этим предварительным распределением. Дляiform_beta_1, предыдущее распределение является равномерным, тогда имя оси X будет равномерным. Вот что я пытаюсь сделать:

input <- uniform_beta_1
nm <- deparse(substitute(input))

Затем примените команду подстроки для оценки предыдущего распределения. Однако в этом случае nm вернет «input», а не «iform_beta_1 ». Мне интересно, могу ли я как-нибудь вернуть'iform_beta_1 '?

Большое спасибо за вашу помощь.

1 Ответ

0 голосов
/ 26 апреля 2019

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...