gpt4 book ai didi

r - 在 R 中检查字符(字母)数据输入的正确方法是什么?

转载 作者:行者123 更新时间:2023-12-02 08:54:31 24 4
gpt4 key购买 nike

假设我希望我的 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
}

问题:

  1. 我知道is.na(n)表示如果 n 为空(不可用),那么如果用户按 Enter is.na(n)变成TRUE 。这是正确的吗?

  2. 什么意思:n <- ifelse(grepl("\\D",n),-1,as.integer(n)

  3. 如何检查用户是否输入了 (a, b, c, d, ...)?

感谢那些能够拯救我的人。

奥乌苏·艾萨克

最佳答案

请参阅 ?regex?grep,以及我的答案,您从中复制了代码。

问题1:如果用户直接按回车键,n就会变成"",当它变成整数时,就会变成NA。

> n <- ""
> as.integer(n)
[1] NA

Q2:grepl 是一个函数,用于检查向量中的值是否符合正则表达式 (?regex) 并返回逻辑向量。在本例中,正则表达式为 "\\D"\D 表示非数字的任何内容,包括负号或点。反斜杠必须被转义,所以这就是它是双斜杠的原因。因此,如果它适合任何非数字的内容,n 将变为 -1。现在“”不适合任何东西,所以n将变成as.integer(n),因此NA(参见Q1)。

Q3:要检查字母,您可以使用-again-正则表达式,或%in%字母:

> n <- "a"
> grepl("[a-z]",n)
[1] TRUE
> n %in% letters
[1] TRUE

或者,如果您想同时使用小写和大写:

> n <- c("a","A")
> grepl("[[:alpha:]]",n)
[1] TRUE TRUE
> grepl("(?i)[a-z]",n)
[1] TRUE TRUE

这些只是一些可能性。仔细阅读我引用的帮助文件并使用它一段时间。一旦掌握了正则表达式的窍门,它就会非常强大。

关于r - 在 R 中检查字符(字母)数据输入的正确方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6043588/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com