R语言中as.numeric()与as.logical()生成NA的警告差异原因探究
为什么
as.numeric("eggplant")会抛出NA警告而as.logical("eggplant")不会? 这是由两个函数的设计逻辑差异决定的:
as.numeric()的警告逻辑:
当尝试将非数值字符串转换为数值时,R默认认为这种转换大概率是用户的误操作——毕竟正常场景下转数值都是为了得到有效数字。无法解析出有效数值而生成NA属于意外情况,所以会抛出NAs introduced by coercion.的警告,用来提示你检查数据是否符合预期。as.logical()的无警告逻辑:
R对字符串转逻辑值有非常严格的匹配规则:只有严格等于"TRUE"/"T"的字符串会被转为TRUE,严格等于"FALSE"/"F"的字符串会被转为FALSE,所有其他字符串都会被转为NA。这种非有效输入转NA的行为是函数设计时就明确的预期结果,R认为这是用户应该知晓的规则,所以不会额外抛出警告。
举个简单测试验证:
as.logical("TRUE") # 返回 TRUE as.logical("F") # 返回 FALSE as.logical("true") # 返回 NA,无警告 as.logical("eggplant") # 返回 NA,无警告
内容的提问来源于stack exchange,提问作者Mark R
相关产品推荐
相关产品推荐

