Данные внутри функции (создание пакета)
Если мне нужно использовать набор данных внутри функции (как таблицу поиска) внутри пакета, который я создаю, мне нужно явно загрузить набор данных внутри функции?
Функция и набор данных являются частью моего пакета.
Правильно ли этот набор данных используется внутри функции:
foo <- function(x){
x <- dataset_in_question
}
или это лучше:
foo <- function(x){
x <- data(dataset_in_question)
}
или есть какой-то подход, я не думаю об этом правильно?
Ответы
Ответ 1
Можно просто поместить набор данных в файл .rda в папку R, как описано Хэдли здесь: http://r-pkgs.had.co.nz/data.html#data-sysdata p >
Мэтью Джокерс использует этот подход в пакете syuzhet для наборов данных, включая набор данных bing
, как показано на ~ строке 452 здесь: https://github.com/mjockers/syuzhet/blob/master/R/syuzhet.R
bing
недоступен для пользователя, но находится в пакете, как показано на рисунке: syuzhet:::bing
По существу, команда devtools::use_data(..., internal = TRUE)
будет устанавливать все так, как нужно.
Ответ 2
В последнее время обсуждалась недавняя дискуссия об этой теме (в контексте разработки пакета) на R-devel, многочисленные вопросы которой относятся к этому вопросу:
Btw: Я не совсем понимаю, как ваш первый подход должен работать. Что делать x <- dataset_in_question
? Является ли dataset_in_question
глобальной переменной или определенной ранее?
Ответ 3
Для меня нужно было использовать get()
дополнительно к LazyData: true
в DESCRIPTION
файле (см. postig @Henrik, пункт 3), чтобы избавиться от ПРИМЕЧАНИЕ no visible binding for global variable ...
. Моя версия R 3.2.3
.
foo <- function(x){
get("dataset_in_question")
}
Итак, LazyData делает dataset_in_question
доступным напрямую (без использования data("dataset_in_question", envir = environment())
), а get()
должен удовлетворять R CMD check
НТН