如何在R中以交互方式输入整数

时间:2011-05-03 18:54:11

标签: r

亲爱的,我希望以交互方式输入一个整数到R中然后捕获它并在我的代码中使用它。我正在尝试使用scan()函数,但它给了我错误! 这就是我所做的:

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

此外,在执行第一行之后,我希望程序暂停,以便在检查while循环之前输入n

#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  
}  
非常感谢所有可以提供帮助的人。 艾萨克·奥乌苏(Isaac Owusu)

3 个答案:

答案 0 :(得分:3)

尝试:

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

答案 1 :(得分: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)
}

答案 2 :(得分:1)

如果在Windows上,您可以使用对话框:

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

它将始终返回角色,因此您必须进行必要的转换和测试。

E.g:

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