Подтвердить что ты не робот

Предупреждение: закрытие неиспользуемого соединения n

getCommentary=function(){
    Commentary=readLines(file("C:\\Commentary\\com.txt"))
    return(Commentary)
    close(readLines)
    closeAllConnections()
}

Я не знаю, что не так с этой функцией. Когда я запускаю это в R, он продолжает давать мне следующее предупреждение:

Warning message:
closing unused connection 5 ("C:\\Commentary\\com.txt") 
4b9b3361

Ответ 1

readLines() - это функция, вы не close(). Вы хотите закрыть соединение, открытое функцией file(). Кроме того, перед тем, как закрыть какие-либо соединения, вы return() ing. Что касается функции, строки после оператора return() не существуют.

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

R> cat("foobar\n", file = "foo.txt")
R> con <- file("foo.txt")
R> out <- readLines(con)
R> out
[1] "foobar"
R> close(con)

Чтобы написать вашу функцию, однако, я бы, вероятно, придерживался немного другого подхода:

getCommentary <- function(filepath) {
    con <- file(filepath)
    on.exit(close(con))
    Commentary <-readLines(con)
    Commentary
}

Используется следующим образом: текстовый файл, созданный выше, в качестве файла примера для чтения из

R> getCommentary("foo.txt")
[1] "foobar"

Я использовал on.exit(), так что после создания con, если функция завершается, по какой-то причине соединение будет закрыто. Если вы оставите это только до оператора close(con) непосредственно перед последней строкой, например:

    Commentary <-readLines(con)
    close(con)
    Commentary
}

функция может выйти из строя при вызове readLines() и завершить работу, поэтому соединение не будет закрыто. on.exit() обеспечит закрытие соединения, даже если функция заканчивается раньше.