write.table (..., append = T): не удается открыть соединение - PullRequest
4 голосов
/ 30 сентября 2010

Мне интересно, сталкивался ли кто-нибудь еще с этой проблемой.Я пишу довольно небольшое количество данных в CSV-файл.Это около 30 строк, 50 раз.

Я использую цикл for для записи данных в файл.

Иногда кажется "привередливым", операция успешно завершается, а иногда она останавливается после первых десяти раз (300 строк), других раз 3 или 5 ..., говоря мне

"не могу открыть соединение ".

Я предполагаю, что это какой-то тайм-аут.Есть ли способ сказать R "замедляться" при написании таблиц?

Прежде чем вы спросите: здесь слишком много кода, чтобы привести пример здесь.

Ответы [ 2 ]

3 голосов
/ 30 сентября 2010

Код поможет, несмотря на ваши возражения.R имеет пул соединений фиксированного размера, и я подозреваю, что у вас заканчивается соединение.

Поэтому убедитесь, что вы выполняете три шага

  1. открытое соединение (и проверьте на ошибкув качестве бонуса)
  2. написать с использованием соединения
  3. закрыть соединение
2 голосов
/ 30 сентября 2010

Я не могу воспроизвести его на 32-битной версии R 2.11.1 на 64-битной Windows 7. Для такого рода вещей, пожалуйста, предоставьте больше информации о вашей системе (см., Например, ?R.version, ?Sys.info)

Память намного быстрее, чем доступ к диску. 1500 строк в значительной степени управляемы в памяти и могут быть записаны в файл за один раз. Если это разные наборы данных, добавьте дополнительную факторную переменную, указывающую набор (от set1 до set50). Все ваши данные легко управляются в одном кадре, и вам не нужно много раз обращаться к диску.

В случае, если это действительно для 50 файлов, этот код иллюстрирует ценный совет Дирка:

for(i in 1:50){
    ...
    ff <- file("C:/Mydir/Myfile.txt",open="at")
    write.table(myData,file=ff)
    close(ff)
}

См. Также справку: ?file РЕДАКТИРОВАТЬ: вы должны использовать open = "at" вместо open = "wt". "at" это режим добавления. «wt» - это режим записи. append = T - это то же самое, что open = "at".

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...