R语言中as.numeric()函数为何输出结果不一致?
R语言
as.numeric()处理输入的不一致问题 问题描述
我写了一个R函数用来判断输入是否为数值类型:
numeric_check <- function() { input <- readline(prompt="Enter something: ") cat("Input: ", input, "\n") cat("Input type: ", class(input), "\n") check <- as.numeric(input) cat("NA or number? ", check, "\n") cat("Type:", class(check), "\n") if (is.na(check)) { print("Not numeric.") } else { print("Numeric.") } }
输入纯数字时程序运行正常,但输入带引号的字符串"123"时,函数里的as.numeric(input)返回NA;但单独执行test <- as.numeric("123")时,test的值却是123。为什么会出现这种不一致?
原因解析
核心差异在于输入的字符串内容本质不同:
- 当你在函数中通过
readline输入"123"时,readline会把你输入的所有内容(包括双引号)原封不动读取为字符串,也就是input的实际值是'"123"'(包含引号的字符序列)。此时as.numeric尝试转换这个包含非数字字符(引号)的字符串,自然会返回NA。 - 而单独执行
as.numeric("123")时,这里的"123"是R的字符串字面量,R会把引号当作字符串的界定符,实际存储的字符内容是123(没有引号),所以as.numeric能正常将其转换为数值123。
你可以在函数里添加一行print(input)验证这一点:当输入"123"时,控制台会输出[1] "\"123\"",明确显示字符串包含引号。
内容的提问来源于stack exchange,提问作者Max
相关产品推荐
相关产品推荐

