假设我希望我的R程序的用户输入正数.
如果他输入负数或输入任何字母(a,b,c,d等),我会想让他继续尝试,直到他输入所需的正数.
如何检查他是否输入了一个角色(a,b,c等)?
例如,如果我有:(事实上,这个网站上有人帮我正确编写了这段代码,但我不明白某些特别的东西,我"#explanation of this line"在代码中指出的第三行
n <- -1
while(is.na(n) | (n < 1) ){
n <- readline("enter a positive integer for the number of simulations: ")
n <- ifelse(grepl("\\D",n),-1,as.integer(n)) #explanation of this line
}
Run Code Online (Sandbox Code Playgroud)
问题:
我知道这is.na(n)意味着如果n为null(不可用),那么如果用户按下Enter则is.na(n)成为TRUE.那是对的吗?
是什么意思:n <- ifelse(grepl("\\D",n),-1,as.integer(n)?
如何检查用户是否输入(a,b,c,d,...)?
感谢那些可以帮助我的人.
Owusu Isaac
看到?regex和?grep,我的回答你复制了代码.
Q1:如果用户只按下enter,则n变为"",当变为整数时,将变为NA.
> n <- ""
> as.integer(n)
[1] NA
Run Code Online (Sandbox Code Playgroud)
Q2:grepl是一个函数,用于检查向量中的值是否适合正则表达式(?regex)并返回逻辑向量.在这种情况下,正则表达式是"\\D".\D指任何不是数字的东西,包括负号或点.反斜杠必须被转义,这就是为什么它是双倍的.因此,如果它适合任何不是数字的东西,n将变为-1.现在""不适合任何东西,因此n将变为as.integer(n),因此NA(参见Q1).
问题3:对于检查字母,您可以使用-again-正则表达式,或者%in% letters:
> n <- "a"
> grepl("[a-z]",n)
[1] TRUE
> n %in% letters
[1] TRUE
Run Code Online (Sandbox Code Playgroud)
或者,如果您想同时使用小写和大写:
> n <- c("a","A")
> grepl("[[:alpha:]]",n)
[1] TRUE TRUE
> grepl("(?i)[a-z]",n)
[1] TRUE TRUE
Run Code Online (Sandbox Code Playgroud)
这些只是一些可能性.阅读我所提及的帮助文件并暂时使用它.一旦掌握了它,正则表达式就非常强大.
| 归档时间: |
|
| 查看次数: |
225 次 |
| 最近记录: |