Создание системы подсказок / ответов для ввода данных в R


84

Я создал код R для использования людьми, которые ничего не знают о R (хотя я сам довольно зеленый). Мне приходилось просить людей вставлять исходные данные в консоль R (со смешанными результатами), и я надеялся создать более удобный для пользователей способ ввода данных.

В идеале кто-то мог бы сесть за консоль, ввести команду и получить вопросы о том, как вводить данные.

Например, человек загружает r и видит подсказку:

What is x value?

Человек вводит:

2

Следующая подсказка:

What is y value?

Типы лиц в:

3

Следующая подсказка:

 What are T values?

Типы лиц в:

 4,3,2,1

Следующая подсказка:

Что такое значения V?

Типы лиц в:

4,5,6,9

И с этими четырьмя вновь определенными переменными (X, Y, T, V) следующим шагом R будет запуск предварительно написанного кода.

X+Y
V+T

И в консоли всплывают ответы

5
8 8 8 10

И все довольны

Приношу свои извинения, так как это не воспроизводимый вопрос типа кода, но я не уверен, как подойти к тому, чтобы заставить R задавать вопросы, а не спрашивать меня о R!

Ответы:


74

Поскольку это предполагается использовать только как интерактивный код, это readline()может сработать для вас. Я не добавлял никакой проверки ошибок, но вы, вероятно, захотите сделать изрядное количество этого, чтобы обеспечить правильный ввод. Но вот основная концепция:

fun <- function(){
  x <- readline("What is the value of x?")  
  y <- readline("What is the value of y?")
  t <- readline("What are the T values?")
  v <- readline("What are the V values?")

  x <- as.numeric(unlist(strsplit(x, ",")))
  y <- as.numeric(unlist(strsplit(y, ",")))
  t <- as.numeric(unlist(strsplit(t, ",")))
  v <- as.numeric(unlist(strsplit(v, ",")))

  out1 <- x + y
  out2 <- t + v

  return(list(out1, out2))

}

3
Код отлично работает! Я был немного смущен тем, как его запустить, но, посмотрев примечания к readline (), я просто добавил одну последнюю строку к приведенному выше «if (interactive ()) fun ()», и он запускает приглашение автоматически. Благодаря!
Vinterwoo

1
Это мило. Однако я пытался понять, что именно происходит с функциями unlist и strsplit. Что здесь делает R?
Seanosapien

1
@Seanosapien Параметр strsplit необходим для удаления запятых из ввода, если пользователь вводит "4,3,2,1", как в исходном примере. В этом нет необходимости, если ввод не в этом формате.
Лорен Фитч

62

Смотрите также ?menu из utilsдля простого интерфейса текстового базового меню и подсказок, которые также используются в devtools.

Вот пример:

> menu(c("Yes", "No"), title="Do you want this?")
Do you want this? 

1: Yes
2: No

Selection:

7

Поскольку этот вопрос воскрес из мертвых, он, вероятно, пишет обновленный ответ.

Если в этом случае графический интерфейс хоть сколько-нибудь полезен, пакет Shiny теперь хорошо интегрирован с RStudio, и было бы очень легко реализовать его как приложение Shiny. На веб-сайте http://shiny.rstudio.com есть дополнительная информация, включая примеры и документацию.


5

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

swirl - это программный пакет для языка программирования R, который превращает консоль R в интерактивную среду обучения. Пользователи получают немедленную обратную связь, поскольку они проходят самостоятельные уроки по науке о данных и программированию на языке R.

Инструкции по созданию контента можно найти здесь: http://swirlstats.com/instructors.html .

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.