Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R read.table csv,带有经典mac行结尾_R_Csv_Line Endings - Fatal编程技术网

R read.table csv,带有经典mac行结尾

R read.table csv,带有经典mac行结尾,r,csv,line-endings,R,Csv,Line Endings,我有一个逗号分隔的值文件,当我在vim中打开它时,它是这样的: 12,31,50,,12^M34,23,45,2,12^M12,31,50,,12^M34,23,45,2,12^M 等等。我相信这意味着我的CSV只使用CR(经典mac)行结尾。R的read.table()函数表面上需要LF行结尾,或其变体 我知道我可以对文件进行预处理,这可能就是我要做的 撇开这个解决方案不谈:有没有办法将CR文件直接导入R?例如,write.table()有一个“eol”参数,可以用来指定输出的行尾——但我没

我有一个逗号分隔的值文件,当我在vim中打开它时,它是这样的:

12,31,50,,12^M34,23,45,2,12^M12,31,50,,12^M34,23,45,2,12^M
等等。我相信这意味着我的CSV只使用CR(经典mac)行结尾。R的read.table()函数表面上需要LF行结尾,或其变体

我知道我可以对文件进行预处理,这可能就是我要做的

撇开这个解决方案不谈:有没有办法将CR文件直接导入R?例如,write.table()有一个“eol”参数,可以用来指定输出的行尾——但我没有看到read.table()的类似参数(cf.)。

R不会将“^M”识别为任何有用的字符。(我想可能vim只是向您显示一个cntrl-M作为该字符。)如果是在文本连接流中,R将认为它不是有效的转义字符,因为“^”不用于此目的。您可能需要进行预处理,除非您希望将其通过scan()并使用gsub()替换:


有一个R本机解决方案不需要预处理或外部黑客。对于Mac字符编码,应使用
read.table
函数的
encoding
输入参数,并将其设置为等于
“拉丁1”

例如,假设Mac(^M表示返回)格式的文件保存为
test.csv
,加载方式如下:

 test <- read.table("./test.csv", sep=",", encoding="latin1")

test或者,如果R应该能够优雅地处理mac行结尾,我就会知道我还有另一个问题……是的,^M只是vim在CR中的占位符。仔细看我的错误,发现我的问题在转换为LF后仍然存在:我首先需要设置fill=T:#啊,原来的变长行问题。
count.fields
函数适用于该问题。
:1,$ s/{ctrl-V}{ctrl-M}//
 test <- read.table("./test.csv", sep=",", encoding="latin1")