R语言:如何将文本文件中的"Inf"字符串转为数值型以生成向量
解决R中读取包含Inf/-Inf的文件并生成向量的问题
别担心,这个问题其实很好解决,R本身就有内置方法可以识别Inf和-Inf,我给你几种简单的方案,你可以根据自己的文件格式来选:
方案1:文件内容用逗号分隔(和你想要的向量格式一致)
先把数据存成一个文本文件(比如命名为data.txt),内容如下:1, 2, Inf, 2, -Inf然后用
scan()函数读取,它会自动把Inf和-Inf解析成R里的无穷大值:c_vec <- scan("data.txt", sep = ",", quiet = TRUE) # 查看结果 c_vec # 输出: [1] 1 2 Inf 2 -Inf这里我把变量名改成了
c_vec,避免和R内置的c()函数重名,建议你也这么做,减少代码混淆。方案2:每行存储一个元素
如果你的文件是每行一个值(比如data.txt内容如下):1 2 Inf 2 -Inf直接用
scan()读取即可,不需要指定分隔符:c_vec <- scan("data.txt", quiet = TRUE)最终生成的向量和方案1完全一致。
方案3:如果文件里是小写的
inf/-inf
要是你的文件里用的是小写的无穷大标记,也可以先读取成字符串,替换后再转成数值:
假设data.txt内容是:1,2,inf,2,-inf执行以下代码:
# 先读取为字符串类型 raw_str <- scan("data.txt", what = character(), sep = ",", quiet = TRUE) # 替换小写标记为R识别的大写格式 raw_str[raw_str == "inf"] <- "Inf" raw_str[raw_str == "-inf"] <- "-Inf" # 转换为数值向量 c_vec <- as.numeric(raw_str)
本质上,R的scan()和read.table()这类读取函数默认就支持识别Inf和-Inf作为合法数值,只要文件里的标记是标准大写形式,直接读取就能搞定~
内容的提问来源于stack exchange,提问作者user152503
相关产品推荐
相关产品推荐

