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
11766
Россия, Москва
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, Супермодераторы



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

Сейчас этот форум просматривают: DariaRychenkova


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

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