Как я могу сделать объект соединения без открытого соединения в R? - PullRequest
1 голос
/ 16 января 2020

Я не могу создать объект закрытого соединения. Я хочу, чтобы объект соединения сидел без дела, поэтому я могу дать ему соединение, если isOpen(myCon) возвращает FALSE. Я ожидаю, что myCon<-file() даст мне закрытое соединение, но isOpen(myCon) вернет TRUE. Из файла справки видно, что file() фактически возвращает соединение с «анонимным файлом», который, по-видимому, является просто местом в памяти, которое действует как файл. ... не то, что я хочу. Если я создаю анонимный файл и выполняю close(myCon), то isOpen(myCon) выдает неверную ошибку соединения, а не возвращает FALSE. Я не хочу быть в ловушке ошибок, просто чтобы получить мое ложное значение. Как я могу создать действующее соединение, которое не открыто? Должен быть способ, которым isOpen(myCon) может вернуть FALSE, иначе это несколько бессмысленная функция. Моя ОС Windows 7.

1 Ответ

1 голос
/ 17 января 2020

file () работает до тех пор, пока первый параметр (описание) является непустой строкой. Пример:

> myCon <- file("dumdum")
> isOpen(myCon)
[1] FALSE

Ключ в том, что второй параметр (открытый) остается пустым (по умолчанию). Не имеет значения, является ли строка, используемая для описания, существующим файлом или нет. Однако это не означает, что соединение не может быть использовано. R открывает соединение по мере необходимости. Например:

> myCon <- file("important log file.txt")
> isOpen(myCon)
[1] FALSE
> cat("Thinking this will fail, because the connection is closed.  ...wrong!", file=myCon)
> isOpen(myCon)
[1] FALSE

Файл только что перезаписан этой одной строкой.

Безопасный способ установить резервное соединение - создать описание с помощью tempfile (). Это возвращает строку, которая гарантированно "не используется в настоящее время" (... согласно странице справки. Я понимаю, что это означает, что строка не является именем существующего файла.)

> myCon <- file( tempfile() )
> isOpen(myCon)
[1] FALSE
> cat("Didn't mean to do this, but all it will do is create a new file.", file=myCon)
> isOpen(myCon)
[1] FALSE

В данном случае эта строка была записана в файл, но она ничего не перезаписывала.

Большое спасибо Мартину Моргану за то, что он указал мне правильное направление. Я приветствую дополнительные комментарии.

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