Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Data not exported from namespace in R

I've set up and been regularly updating my R package to GitHub following Hadley's extensive documentation about Devtools, Roxygen2 etc., on my laptop. Yesterday I decided to use my main PC instead and am now looking to push changes up to GitHub. I got the following error after entering document() :

Error: 'Adult_Females' is not an exported object from 'namespace:gbm.auto'

Adult_Females is the name of the first data file in /Data. According to this (scroll down to 'Data')

"files that live in data/ don’t use the usual namespace mechanism and don’t need to be exported."

So... what's a guy to do? I've not edited Adult_Females in any way and the R script I edited doesn't reference it. My suspicion is that this error will pop up for all the data files and it just happened that this is the first of them, but that's conjecture at this point.

Thanks in advance. install_github("SimonDedman/gbm.auto") if you want to have a look.

2020/01/25 edit: looks like I've fixed it. A commit on 26/11/19 saw /Data and all RData files added, with subsequent commit deleting the identical /data folder and files. Not sure if I did that myself, can't think why I would suddenly decide to, but such mysteries are now lost to the sands of time. This change and document() and commit caused the .R files to be removed as export()s from NAMESPACE and the RData files to no longer trigger the titular "data not exported" problem EVEN THOUGH this isn't noted anywhere in DESCRIPTION, NAMESPACE, nor the files themselves. May this weirdness be a lighthouse that warns others of the rock I've spent the last 3 years trapped on!

like image 797
dez93_2000 Avatar asked Nov 01 '16 16:11

dez93_2000


2 Answers

I encountered a similar problem when writing an R package which contains a dataset. I guess you must have saved the dataset in a different name.

For example, you may write:

devtools:::use_data(YourDataSetName, pkg = "Path_to_Pkg/data", internal = FALSE)

but in your data.R file, you specified a dataset name at the very end other than YourDataSetName (suppose you followed Hadley's instructions here: http://r-pkgs.had.co.nz/data.html).

Make sure the data object you saved to the "data" folder is the same as you specified in your data.R file.


Note: use_data is now part of usethis package.

like image 64
alittleboy Avatar answered Nov 14 '22 06:11

alittleboy


for data objects, the names must match in four (4) places, so check them all:

  1. name of data/foo.rda file
  2. name of object in data/foo.rda file
  3. name of R/foo.R file
  4. string at end of R/foo.R file

all four items must match--in this case 'foo'. If you change the name of the foo.rda and foo.R files, say to bar.rda and bar.R, it's easy to forget to rename the object in the .rda file from 'foo' to 'bar.' It's usually easiest to load the file, rename the object, and save the file under the new name:

load('data/foo.rda')
bar <- foo
save(bar, file='data/bar.rda')

If you don't do this, you get an unhelpful error about the object not loaded from namespace. You DON'T need to @export data objects, so instead ensure the names match in all places.

like image 3
0mn1 Avatar answered Nov 14 '22 06:11

0mn1