2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему
 
 R: write.csv() игнорирует разделитель
Сообщение16.02.2017, 17:46 


10/03/16
4444
Aeroport
Добрый день, вопрос к программерам на R.

Нужно записать текстовик с разделителями, которые не встречались бы в рамках одного элемента таблицы. Т.е. если в колонке "Куда ездили" и строке "Год назад" встречается "Лондон, Париж, Брюссель", то "," очевидным образом не годится. Оказалось, что не годится также ";" и даже "_", после чего в качестве делимитера было решено использовать тройной знак подчеркивания:

Используется синтаксис HTML
write.csv(bad_good_alldata, file="ALL_PROJECT_DATA.csv", quote=FALSE, row.names=FALSE, sep="___")


Здесь интерпретатор выдал предупреждение: attempt to set 'sep' ignored
Нет, конечно я понимаю что *.csv - это по определению формат записи данных, разделенных запятыми, более того,

Используется синтаксис HTML
write.table(bad_good_alldata, file="ALL_PROJECT_DATA.csv", quote=FALSE, row.names=FALSE, sep="___")


нормально работает, но спрашивается какого извините дьявола в функции write.csv() sep присутствует в качестве входного аргумента? Очень хочется прояснить этот момент - что это: кривой пакет или я чего-то глобально не догоняю?

 Профиль  
                  
 
 Re: R: write.csv() игнорирует разделитель
Сообщение16.02.2017, 21:40 
Заслуженный участник
Аватара пользователя


06/10/08
6422
В документации все написано.
R Manual писал(а):
write.csv and write.csv2 provide convenience wrappers for writing CSV files. They set sep and dec (see below), qmethod = "double", and col.names to NA if row.names = TRUE (the default) and to TRUE otherwise.

write.csv uses "." for the decimal point and a comma for the separator.

write.csv2 uses a comma for the decimal point and a semicolon for the separator, the Excel convention for CSV files in some Western European locales.

These wrappers are deliberately inflexible: they are designed to ensure that the correct conventions are used to write a valid file. Attempts to change append, col.names, sep, dec or qmethod are ignored, with a warning.

 Профиль  
                  
 
 Re: R: write.csv() игнорирует разделитель
Сообщение16.02.2017, 22:30 


10/03/16
4444
Aeroport
Xaositect
Большое спасибо за ваш ответ. Я читал мануал, и соответственно все то что вами процитировано. Как оно работает (т.е. не работает) я разобрался.

Я хочу понять сам принцип, почему так получилось. Наверное надо подробнее. Вот скажем есть функция

Используется синтаксис C++
int z = foo (int x, int y)
{
      return x+y
}


То обстоятельство что у нее две входные переменные как бы намекает, что я могу вызывать ее с тем Игреком, с которым захочу (из некоторого допустимого мн-ва, содержащего заведомо более одного элемента, если быть точным :) ). Если бы создатель ф-ции foo предполагал сложение Икса только с каким-нибудь одним заранее заданным числом, наверное логично было бы сделать foo функцией одной переменной, да?

Теперь я пытаюсь спроецировать эту логику на вот это высказывание

Xaositect в сообщении #1193226 писал(а):
Attempts to change append, col.names, sep, dec or qmethod are ignored, with a warning.


и получаю минимум когнитивный диссонанс. Почему когда прописывают ее заголовок в хелпах, то sep там присутствует? Почему его не убрали? Что-то в области наследования, шаблонов или что? Первый раз это вижу (хотя конечно это ничего не значит, я сам не программист). Теряюсь в догадках... Это вообще плохо или хорошо?

 Профиль  
                  
 
 Re: R: write.csv() игнорирует разделитель
Сообщение16.02.2017, 22:50 
Аватара пользователя


11/06/12
10390
стихия.вздох.мюсли
Присоединяюсь к вопросу ТС.
ozheredov в сообщении #1193196 писал(а):
Нет, конечно я понимаю что *.csv - это по определению формат записи данных, разделенных запятыми
Да ничего подобного. Исторически, конечно, так и было, но в две тысячи семнадцатом году та же Wolfram Mathematica читает и пишет CSV с любыми разумными разделителями. Вообще, CSV это, извините, всего лишь три буквы.

 Профиль  
                  
 
 Re: R: write.csv() игнорирует разделитель
Сообщение16.02.2017, 23:15 
Заслуженный участник


27/04/09
28128
Есть классные символы с кодами 0x1C0x1F, имеющиеся как в ASCII, так и перекочевавшие в Unicode, которые предназначались для разделения полей и записей в текстовых файлах: 0x1F — полей (аналог запятой), 0x1E — записей (аналог перевода строки), 0x1D — групп записей и 0x1C — групп записей более высокого уровня. К сожалению, мало кто знает об этом и использует вместо бесчисленных несовместимых вариаций CSV.

[1] [2]

 Профиль  
                  
 
 Re: R: write.csv() игнорирует разделитель
Сообщение17.02.2017, 00:00 
Заслуженный участник


20/08/14
11867
Россия, Москва
arseniiv в сообщении #1193245 писал(а):
Есть классные символы с кодами 0x1C…0x1F,
Угу, классные, аж 4 уровня. Вот только кто их использует из стандартных программ? Excel2003 вон ни в какую не хочет и заставить без правки реестра не получается.

 Профиль  
                  
 
 Re: R: write.csv() игнорирует разделитель
Сообщение17.02.2017, 00:13 
Заслуженный участник


27/04/09
28128
Dmitriy40 в сообщении #1193252 писал(а):
Вот только кто их использует из стандартных программ?
В том-то и беда.

 Профиль  
                  
 
 Re: R: write.csv() игнорирует разделитель
Сообщение17.02.2017, 18:05 


10/03/16
4444
Aeroport
Так кто нибудь сталкивался с игнором значений входных переменных? Или это только в R? или это только в данном пакете? Если честно я уже вообще не понимаю как такое получается

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 8 ] 

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group