亲爱的,我希望以交互方式输入一个整数到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)
答案 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)