2011-05-03 58 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

相关问题