Как написать файлы с окончанием строк Unix на R для Windows
У меня есть R script, который создает текстовый файл в Windows.
Я использую функции write.table
и write
для записи в файл.
Затем мне нужно использовать этот файл в Unix-системах, но файл имеет символы конца строки Windows (^ M).
Возможно ли записать файлы с R в Windows с символами конца строки Unix?
Изменить
Вот пример воспроизводимости:
output.file <- file.path("./test.txt")
x <- c(1,2,3,4)
y <- c(5,6,7,8)
my.df <- data.frame(x, y)
my.df[] <- lapply(my.df, sprintf, fmt = "%14.7E")
write("First line", file = output.file)
write("Second line", file = output.file, append = TRUE)
write.table(my.df,
row.names = FALSE,
col.names = FALSE,
file = output.file,
quote = FALSE,
append = TRUE,
sep = "")
И результат, как видно NotePad ++:
![введите описание изображения здесь]()
Ответы
Ответ 1
Как указано в help(write.table)
:
Чтобы записать файл в стиле Unix в Windows, используйте двоичное соединение, например. file = file ( "filename", "wb" ).
В вашем примере просто измените первую строку, чтобы открыть соединение "wb"
и close
в конце:
output.file <- file("./test.txt", "wb")
x <- c(1,2,3,4)
y <- c(5,6,7,8)
my.df <- data.frame(x, y)
my.df[] <- lapply(my.df, sprintf, fmt = "%14.7E")
write("First line", file = output.file)
write("Second line", file = output.file, append = TRUE)
write.table(my.df,
row.names = FALSE,
col.names = FALSE,
file = output.file,
quote = FALSE,
append = TRUE,
sep = "")
close(output.file)
![введите описание изображения здесь]()
Ответ 2
Окончание строк типа unix может быть достигнуто с помощью wb
write | двоичного режима в файлах.
Эта цитата из статьи Rnews может быть полезна:
Ripley, B. D. (2001) Соединения. R News, 1/1, 16-7.
Текст vs двоичный Существует различие между текстовым и бинарным режимами. Предполагается, что текстовые функции, такие как сканирование и cat должен использовать соединения текстового режима, а двоичный режим используется с readBin и writeBin. Это различие еще не и основное различие заключается в том, являются ли файлы открыт в текстовом или двоичном режиме (если это имеет значение). Теперь похоже, что открытие всех файлов в двоичном режиме и управление переводом строки окончание внутри R приведет к меньшему количеству неожиданностей. Уже чтение из соединения в текстовом режиме переводит окончания строк из Unix (LF), DOS/Windows (CRLF) и Macintosh (CR) (и от всех соединения, а не только файлы).
# setup file connection
con <- file( output.file )
# open connection
if( !isOpen(con = con, rw = "wb") ) { open( con, open = "wb" ) }
# write contents
write( x = paste( colnames(my.df), collapse = "\t" ), file = con )
for( i in 1:nrow( my.df )){
write(paste( my.df[i, ], collapse = "\t" ), file = con )
}
close( con ) # close and destroy a connection
# verify file contents
read.table(output.file, header = TRUE, sep = "\t")
# x y
# 1 1 5
# 2 2 6
# 3 3 7
# 4 4 8