2011-05-03 4 views
2

Дорогой, я хотел бы ввести целое число в интерактивном режиме в R, а затем захватить его и использовать в моем коде. Я пытался с помощью функции scan(), но он дал мне ошибки! Это то, что я сделал:Как ввести целое число в интерактивном режиме в R

#This is my question 
print("enter a positive integer") 
n <- scan() 
while(is.numeric(n) == F){ 
    print("enter a positive integer") 
    n <- scan() 
} 

Кроме того, после выполнения первой строки, я хочу, чтобы программа паузы для меня, чтобы ввести п, прежде чем он проверяет время цикла

#This part is not part of my question; after capturing n I would want to use it in a code like this. 
c <- ncol(d) 
r <- nrow(d) 
for(i in 1:c) { 
    d[n,i] <- 0 
} 

много благодаря всем, кто мог бы помочь. Исаак Owusu

ответ

3

Try:

n <- scan (what=integer(), nmax=1, quiet=T) 
+0

Привет Wayne, большое спасибо. Он одинаково работает –

2

Это не будет работать, пока вы просто вставить его в терминал. Вам действительно нужно исправить его из файла для проверки() для правильной работы. Это потому, что когда вы вставляете его в то немедленно выполняет сканирование, затем выполняет возврат каретки после сканирования ... и т.д. Таким образом, сохранить это в файле, «myfile.R», и введите

source('myfile.R') 

После того как вы так далеко, то вам, вероятно, придется отредактировать, как вы используете scan(). Он не работает с ошибкой, если введен неправильный тип, поэтому вам понадобится инструкция try(). То, как вы делаете это, вводимые целые числа всегда будут реальными. Кроме того, как было опубликовано в другом ответе, установите nmax на 1. Следующие будут делать то, что вы хотите ... хотя все еще немного странно (как вы увидите).

n <- NULL 
while(is.numeric(n)==F){ 
    print("enter a positive integer") 
    try(n <- scan (what=integer(), nmax=1), silent = TRUE) 
} 
+0

Привет, Джон, огромное спасибо! Это нормально, я могу использовать его для чего хочу. –

+0

Привет, Джон благодарит за вашу помощь. первые ответы мне дали. – Son

+0

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

1

Если на Windows, вы можете использовать диалоговые окна:

n <- winDialogString("enter a positive integer","") 

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

т.д .:

isPositiveInteger<-FALSE 
while(!isPositiveInteger) { 
    n <- winDialogString("enter a positive integer","") 
    isPositiveInteger <- grepl("^[1-9][0-9]*$", n) 
} 
n <- as.integer(n) 
+0

Привет, Мерек, большое спасибо, я работал над первыми ответами, которые вы и Джорис дали, и это сработало, наконец, с большим количеством битв. Это также мощно. Я вставил в консоль R, и он работает. Я впечатлен этим. Но я не могу найти «рамку», о которой говорит faq. Поэтому я не знаю, как я могу сообщить людям, что ответ в порядке. – Son

Смежные вопросы