2011-05-03 59 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() 
} 

此外,第一線的執行後,我希望程序暫停對我來說,輸入n它檢查while循環

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

多前感謝所有可以幫助的人。 艾薩克·奧烏蘇

回答

3

嘗試:

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

韋恩你好,非常感謝。它同樣適用 – 2011-05-03 19:50:01

2

,而你只需將其粘貼到終端這將無法正常工作。您實際上必須從文件中獲取scan()才能正常工作。這是因爲當你再粘貼它立即執行掃描,然後執行掃描後回車...等,所以,保存在一個文件中,「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

你好John,非常感謝!沒關係,我可以將它用於我想要的。 – 2011-05-03 19:49:19

+0

嗨,John,非常感謝您的幫助。我得到的第一個答案工作。 – Son 2011-05-12 20:48:20

+0

他們的工作,但他們不遵循你的初始意圖的精神,如果有人輸入一個整數以外的東西,它將繼續工作。這是你的條件while循環的目的。這個答案只是你最初的意圖。 – John 2011-05-12 22:31:09

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

嗨Merek非常感謝,我工作的第一個答案,你和Joris給了它,它終於與許多掙扎工作。這也是強大的。我粘貼在R控制檯,它的工作原理。它給我留下了深刻的印象。但是我找不到常見問題解答中提到的「複選框大綱」。所以我不知道我怎麼能讓人們知道答案是好的。 – Son 2011-05-12 20:46:51

相關問題