Имена входных переменных в R через readline - PullRequest
0 голосов
/ 23 февраля 2019

Я совершенно уверен, что кто-то уже задавал этот вопрос, но на самом деле я его не нахожу.

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

my.table <- readline(prompt="Enter name of table: ")
my.variable1<- readline(prompt="Enter name of variable 1: ")
my.variable2<- readline(prompt="Enter name of variable 2: ")
surv_object <- Surv(time = my.table$my.variable1, event = my.table$my.variable2)

На самом деле это не работает.Даже view(my.table) просто возвращает NULL.

Где мне искать эту проблему?Что я сделал не так?

Спасибо за помощь!

Томас

Ответы [ 2 ]

0 голосов
/ 23 февраля 2019

Использование eval (parse (text = ...)) воспринимается большинством опытных программистов с подозрением.Если цель состоит в том, чтобы получить доступ к существующему объекту R, имеющему несколько имен столбцов, то это будет предпочтительным подходом:

Предположим, что ваш пользователь знает, что mtcars находится в рабочей области, и что это имена переменныхявляются:

Вам также нужна функция для ожидания ввода;в противном случае readline просто получает пустое символьное значение и переходит к следующей строке кода.Смотрите более ранний ответ по этому вопросу: Заставьте readline ждать ввода в R

 #Warning: this does not seem to work in RStudio because they assign stdin to /dev/null
my.table <- cat("Enter name of table: "); readLines("stdin", n=1); cat( "\n")
my.variable <- cat("Enter name of variable 1: "); readLines("stdin",n=1); cat( "\n")
my.variable2<- cat("Enter name of variable 2: "); readLines("stdin",n=1);cat( "\n")

my.obj <- get(my.table)

surv_object <- Surv(time = my.obj[my.variable1], event = my.obj[my.variable2])

Если бы я не использовал имя объекта (ввод в качестве значения символа) для доступа и назначенияимя, которое было предопределено, было бы большой PITA, чтобы всегда использовать символ «имя», так как имена R (AKA symbol) на самом деле не заключаются в кавычки, так как они не имеют типовой символ, а скорее типа «язык».

В RStudio мне как-то нужно создать функцию для ввода.Но я не получил проверенную версию для успеха.Может быть, для этого нужен блестящий интерфейс?

0 голосов
/ 23 февраля 2019

Кажется, ваша главная проблема - как преобразовать текст в выражение.Это то, что вы ищите?Это, вероятно, обход лучшей практики больше, чем один.Пользователь должен знать имена объектов таблицы и имена переменных.Ошибки не будут очевидны.Код будет просто делать так, как ему говорят.

Также, если вы используете RStudio, проверьте ?rstudioapi::showPrompt.

Начните с пары таблиц:

table1 <- mtcars
table2 <- iris

Запустите через подсказки.Я ввожу в "table1", "wt", "hp".

my.table <- readline(prompt="Enter name of table: ")
my.variable1<- readline(prompt="Enter name of variable 1: ")
my.variable2<- readline(prompt="Enter name of variable 2: ")

Используя eval(parse(.)), преобразовать строку my.table в объект data.frame().

new.table <- eval(parse(text = my.table))

Ссылка на два столбца.

new.table[, c(my.variable1, my.variable2)]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...