Проблемы с импортом функций с помощью @importFrom pkg fun - PullRequest
0 голосов
/ 23 марта 2019

В настоящее время я пытаюсь разработать свой первый пакет R и столкнуться со следующей проблемой.

У меня есть файл DESCRIPTION, где все необходимые пакеты перечислены в Imports , как это было предложено Хэдли Уикхэмом в его книге. Я использую @importFrom dplyr select для загрузки функции, для внутреннего использования.

При запуске devtools::document() я получаю ошибку:

Ошибка в выборе (paths_original, house_id = H_ID, person_id = P_ID,: не удалось найти функцию "выбрать"

Было бы здорово, если бы кто-то мог помочь мне понять мою ошибку.

Заранее спасибо!

EDIT:

ОПИСАНИЕ * +1021 *

Package: first_package
Title: first package
Version: 0.0.0.9000
Description: first package
Depends:
    R (>= 3.5.2)
Imports:
    foreign (>= 0.8.71),
    plyr (>= 1.8.4),
    dplyr (>= 0.7.7),
    leaflet (>= 2.0.2),
    sf (>= 0.7.1),
    rgeos (>= 0.4.2),
    geosphere (>= 1.5.7),
    sp (>= 1.3.1),
    rgdal (>= 1.3.6),
    mapview (>= 2.6.0),
    lwgeom (>= 0.1.6),
    roxygen2
License: BSD 2-Clause + file LICENSE
Encoding: UTF-8
LazyData: true
RoxygenNote: 6.1.0

функция:

get_clear_df_paths <- function(paths_original) {
  clean_paths <- select(paths_original,
                        household_id = H_ID,
                        person_id = P_ID,
                        household_person_id = HP_ID,
                        weekday = ST_WOTAG,
                        month = ST_MONAT,
                        holiday = feiertag,
                        season = saison,
                        regular_job_related_path = W_RBW,
                        path_purpose = W_ZWECK,
                        starting_point = W_SO2,
                        start_time_hour = W_SZS,
                        start_time_min = W_SZM,
                        arrival_next_day = W_FOLGETAG,
                        arrival_time_hour = W_AZS,
                        arrival_time_min = W_AZM,
                        path_length = wegkm,
                        path_length_imp = wegkm_imp,
                        path_duration_min = wegmin,
                        path_duration_min_imp = wegmin_imp,
                        main_vehicle = hvm,
                        car_driver = pkw_fmf,
                        vehicle_car = W_VM_G,
                        vehicle_carsharing = W_VM_H,
                        district = stt_mun)
}

imports.R

#' @importFrom plyr revalue
#' @importFrom dplyr select
#' @importFrom foreign read.spss
NULL

NAMESPACE

# Generated by roxygen2: do not edit by hand

importFrom(dplyr,select)
importFrom(foreign,read.spss)
importFrom(plyr,revalue)

общедоступная суть ссылки с соответствующими фрагментами кода:

https://gist.github.com/bgrt/b7d32cb3aa0bb128f276bad86c89bdd4

Ответы [ 2 ]

1 голос
/ 23 марта 2019

Создан фиктивный пакет для тестирования, и это работает. Вам необходимо документировать свои функции, как показано ниже. Также, пожалуйста, предоставьте способ глобальной привязки для некоторых переменных в ваших функциях.

    #' Some paths
    #' @description some paths
    #' @param paths_original Some path
    #' @importFrom dplyr select
    #' @export 
    get_clear_df_paths <- function(paths_original) {
      clean_paths <- select(paths_original,
                            household_id = H_ID,
                            person_id = P_ID,
                            household_person_id = HP_ID,
                            weekday = ST_WOTAG,
                            month = ST_MONAT,
                            holiday = feiertag,
                            season = saison,
                            regular_job_related_path = W_RBW,
                            path_purpose = W_ZWECK,
                            starting_point = W_SO2,
                            start_time_hour = W_SZS,
                            start_time_min = W_SZM,
                            arrival_next_day = W_FOLGETAG,
                            arrival_time_hour = W_AZS,
                            arrival_time_min = W_AZM,
                            path_length = wegkm,
                            path_length_imp = wegkm_imp,
                            path_duration_min = wegmin,
                            path_duration_min_imp = wegmin_imp,
                            main_vehicle = hvm,
                            car_driver = pkw_fmf,
                            vehicle_car = W_VM_G,
                                vehicle_carsharing = W_VM_H,
                                district = stt_mun)
    }

Шаги:

library(devtools)
library(roxygen2)
create("SODummypkg")
document("SODummypkg")
check("SODummypkg")

Результат: игнорировать предупреждение (для целей этого ответа). По крайней мере, ошибка не появляется.

-- R CMD check results ---------------------------------------------- SODummypkg 0.0.0.9000 ----
Duration: 1m 10.7s

> checking DESCRIPTION meta-information ... WARNING
  Dependence on R version '3.5.3' not with patchlevel 0

0 errors √ | 1 warning x | 0 notes √
1 голос
/ 23 марта 2019

Я не хочу добавлять это, потому что это "Не ответ", и я обновлю его, чтобы добавить ответ в ближайшее время или удалить его. Однако я полагаю, что было бы полезно продемонстрировать, что базовый подход OP должен работать, поэтому я создал минимальный примерный пакет, импортирующий функцию кажущейся проблемы.

Сначала я настроил структуру пакета:

library(devtools)
create_package("funImport", rstudio = FALSE)
use_package("dplyr")
use_gpl3_license("X")

Затем я добавил один файл к R/, содержащий следующее:

#' Select wrapper
#' 
#' @param .data A tbl
#' @param ... Variable names to select
#' 
#' @return The selected variables
#' @export
Select <- function(.data, ...) {
    return(select(.data, ...))
}

#' @importFrom dplyr select
NULL

Тогда я смог document(), install() и check() без проблем:

document()
# Updating funImport documentation
# Updating roxygen version in /home/jb/funImport/DESCRIPTION
# Writing NAMESPACE
# Loading funImport
# Writing NAMESPACE
# Writing Select.Rd
install()
# Output omitted
check()
# Some output omitted
# ── R CMD check results ─────────────────────────────── funImport 0.0.0.9000 ────
# Duration: 48.2s
# 
# 0 errors ✔ | 0 warnings ✔ | 0 notes ✔

Я также смог использовать функцию без проблем:

library(funImport)
tbl <- tibble::tibble(x = 1:10, y = letters[1:10])
tbl
# # A tibble: 10 x 2
#        x y    
#    <int> <chr>
#  1     1 a    
#  2     2 b    
#  3     3 c    
#  4     4 d    
#  5     5 e    
#  6     6 f    
#  7     7 g    
#  8     8 h    
#  9     9 i    
# 10    10 j  
Select(tbl, x)
# # A tibble: 10 x 1
#        x
#    <int>
#  1     1
#  2     2
#  3     3
#  4     4
#  5     5
#  6     6
#  7     7
#  8     8
#  9     9
# 10    10
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...