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