readline()
의 결과가 숫자인지 확인하는 방법이 있는지 물어보고 싶습니다.readline에서 문자 입력을 검사 할 수있는 방법이 있습니까?
이 입력을 사용하여 수학 연산을 수행해야하므로 숫자와 "."이외의 모든 문자가 필요합니다. 프로그램을 파괴합니다.
각 문자를 확인하려면 문자로 된 입력 문자열을 사용해야합니까? 아니면 그것을 할 수있는 우아한 방법이 있습니까?
readline()
의 결과가 숫자인지 확인하는 방법이 있는지 물어보고 싶습니다.readline에서 문자 입력을 검사 할 수있는 방법이 있습니까?
이 입력을 사용하여 수학 연산을 수행해야하므로 숫자와 "."이외의 모든 문자가 필요합니다. 프로그램을 파괴합니다.
각 문자를 확인하려면 문자로 된 입력 문자열을 사용해야합니까? 아니면 그것을 할 수있는 우아한 방법이 있습니까?
함수 readline()
은 항상 문자열을 반환합니다. 두 가지 방법으로 처리 할 수 있습니다
as.numeric()
에 무력을 사용 :이 NA
으로 숫자로 변환 할 수있는 일을 반환합니다. 그런 다음 is.na()
으로 확인하여이 방법이 효과가 있는지 확인할 수 있습니다.grepl()
을 사용하면 벡터의 모든 요소에 대해 TRUE/FALSE
값을 얻을 수 있습니다.이 값은 일부 문자를 찾았는지 여부를 나타냅니다. 다음과 같이이 x <- readline("give a number: ")
if(grepl("[^[:digit:]\\.-]",x)) stop("This is not a number") else "Hooray"
작품 :
> x <- readline("give a number: ")
give a number: -23.48
> if(grepl("[^[:digit:]\\.-]",x)) stop("This is not a number") else "Hooray"
[1] "Hooray"
> x <- readline("give a number: ")
give a number: -25.645)
> if(grepl("[^[:digit:]\\.-]",x)) stop("This is not a number") else "Hooray"
Error: This is not a number
철저하게 뭔가가 (과학적 표기법 포함) 숫자로 포맷되어 있는지 여부를 확인하고 싶은 경우는, 이것은이다
은 다음 시도 다음과 함께 테스트하는 고전적인 정규 표현식 :
"ˆ[+-]?(\\d+\\.?\\d*|\\.\\d+)([eE][+-]?\\d+)?$"
그러면 다음과 같이됩니다 :
x <- readline("give a number: ")
isnumber <- grepl("ˆ[+-]?(\\d+\\.?\\d*|\\.\\d+)([eE][+-]?\\d+)?$",x)
if(!isnumber) stop("X is not a number") else "Hooray"
regexp에 몇 가지 잠재적 인 구멍이 있음 ; ''13.234.2342 ''를 테스트 케이스로 사용하면 어떨까요? '+ 23'은 합법적 인 번호입니까? '1.0e23'은 어때? –
@BenBolker 두 번째 정규식으로 모든 문제를 해결했습니다. –
'readline()의 값은 "길이가 1 인 문자 벡터"('? readline'을 인용)입니다. 왜 그것을 as.numeric()으로 싸서 프로그램을 NA 입력에 맞게 만들면 어떨까요? –
@apom as.numeric을 사용할 때의 문제점은 기본적으로 입력을 변경한다는 것입니다. 예를 들어 입력이 "2.8"대신 "2,8"이고 결과가 숫자 2가 될 경우 –