包括手动创建的调色板以打包而不直接引用它

问题描述

我有一个正在使用的手动创建的调色板。我已经将.rds调色板文件包含在包文件夹中,并在load(paste0(getwd(),'/my_palette.rds'))函数中引用了它。但是,例如,如果我想共享我的软件包,并且有人要更改他的工作目录,则我认为这是不切实际的,那么该引用将不起作用。我正在寻找一种解决方案,可以在安装软件包时在R中自动构建此调色板,这样我就不必在要引用的软件包文件夹中有确切的文件。这可能吗?

编辑

我使用以下命令在程序包文件夹中创建了data /文件夹:

x<-load(paste0(getwd(),'/my_palette.rds'))
usethis::usedata(x)

然后,我在data /文件夹中单击此.rda以将其加载到我的工作目录中。但是我不知道该怎么称呼它。 load('x')不起作用。

EDIT第2卷

我将介绍将my_palette.rds添加到要应用的程序包中的完整算法:

  1. 创建手动调色板
  2. 通过命令x<-load(dir/my_palette.rds)引用它
  3. 然后我使用命令usethis::use_data(x)(然后使用其中的.rda文件创建数据/文件夹)
  4. 之后,我将ggplot2函数scale_fill_manual(my_package::x)一起使用。我得到的警告是:Error: UnkNown colour name: my_palette

EDIT第3卷

我想描述创建调色板的过程,以便我们可以看到错误的根源。因此,您所做的工作与我所做的工作之间的主要区别在于,您创建了调色板,将其作为颜色的向量以供将来参考。 (这非常重要,您的调色板以矢量类型存储)。我要做的是创建创建调色板的函数,然后将其保存到.rds文件中。我相信这可能是我的调色板存储在文件中的主要区别。您认为这有很大的不同吗?还是可以省略它?

解决方法

在R包中保存数据的过程在这里有很好的描述:https://github.com/life4/textdistance

您可能更喜欢使用内部数据方法,除非您希望软件包的其他用户可以访问调色板。

通过usethis::use_data(),可以将全局环境中的对象添加到数据文件夹,如果设置了R/sysdata.rda,则将对象添加到internal = TRUE。加载软件包时(例如devtools::load_all()),这些数据对象会加载到软件包环境中。

您提到的错误-Error: Unknown colour name: my_palette-表示您生成调色板的方式存在问题。提供生成您的调色板进行检查的代码将很有帮助。

一个例子:

# define color palette
color_palette <- c("#c6d4e1","#2f2016","#fcfaea","#456789")

# save to internal package data - saves data in R/sysdata.rda
usethis::use_data(color_palette,internal = TRUE)

# load package
devtools::load_all()

# refer to color palette
mypackage::color_palette[1]     # "#c6d4e"