Ответ 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()
обеспечит закрытие соединения, даже если функция заканчивается раньше.