Данные внутри функции (создание пакета)

Если мне нужно использовать набор данных внутри функции (как таблицу поиска) внутри пакета, который я создаю, мне нужно явно загрузить набор данных внутри функции?

Функция и набор данных являются частью моего пакета.

Правильно ли этот набор данных используется внутри функции:

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

НТН