如何在 R 包的函数中使用数据?



我目前正在为R包编写一个函数。此函数旨在执行的部分目的是 (a( 将数据作为输入,以及 (b( 根据可接受值列表检查其一列。

这些可接受的值是从另一个组织给我的。它们位于.csv文件中。我想做的是加载这个.csv文件并将其用作参考,以检查用户的列是否具有有效值。

例如,假设用户有以下数据:

set.seed(1839)
user <- data.frame(x=sample(letters,10),
y=rnorm(10))
user
x          y
1  v -0.7025836
2  p -1.4586245
3  f  0.1987113
4  y  1.0544690
5  o -0.7112214
6  m  0.2956671
7  b  0.3016737
8  a -0.0945271
9  x -0.2790357
10 c  0.1681388

.csv包含许多(有用的(列,但我目前只关心一个(z(:

ref <- data.frame(z=letters[1:4], a=rnorm(4), b=(rnorm(4)))
ref
z          a          b
1 a -0.3563105  1.4536406
2 b  1.6841862  1.3232985
3 c  1.3073516 -0.6978598
4 d  0.4352904 -0.3971175

我想运行的代码是(注意:我不是在实际函数中调用library,我只是为了简单起见而在这里这样做(:

library(dplyr)
valid_values <- ref %>%
select(z) %>% 
unname() %>% 
unlist() %>% 
as.character()
summary <- user %>% 
mutate(x_valid=ifelse(x %in% valid_values, TRUE, FALSE))

summary告诉我user中哪些x值是有效的:

x          y x_valid
1  v -0.7025836   FALSE
2  p -1.4586245   FALSE
3  f  0.1987113   FALSE
4  y  1.0544690   FALSE
5  o -0.7112214   FALSE
6  m  0.2956671   FALSE
7  b  0.3016737    TRUE
8  a -0.0945271    TRUE
9  x -0.2790357   FALSE
10 c  0.1681388    TRUE

现在,我应该在函数代码中使用什么来替换ref?我应该将此数据存储在我的包中的什么位置?如何加载它?我应该将其隐藏到什么类型的文件?

该函数应如下所示:

x_check <- function(data) {
# get valid values
valid_values <- ??? %>%
select(z) %>% 
unname() %>% 
unlist() %>% 
as.character()
# compare against valid values
return(
data %>% 
mutate(x_valid=ifelse(x %in% valid_values, TRUE, FALSE))
)
}

我应该用什么替换???来获取数据?我不太关心用户是否能够看到我希望加载的ref数据。


我正在使用devtools::load_all("directory/for/my/package")来测试我的软件包。相关会议信息:

R version 3.4.0 (2017-04-21)
Platform: x86_64-redhat-linux-gnu (64-bit)
Running under: Red Hat Enterprise Linux Server 7.3 (Maipo)
other attached packages:
[1] roxygen2_6.0.1             devtools_1.13.2

我想通了,以防将来有人遇到这种情况。我是如何完成的,只是在函数的本地环境中从/data文件加载数据:

x_check <- function(data) {
# get reference data
data("ref", envir=environment())
# get valid values
valid_values <- ref %>%
select(z) %>% 
unname() %>% 
unlist() %>% 
as.character()
# compare against valid values
return(
data %>% 
mutate(x_valid=ifelse(x %in% valid_values, TRUE, FALSE))
)
}

参见 Hadley Wickham 关于 R 编写包的书,其中他解释了如何在包中存储数据。

"包裹数据最常见的位置是(惊喜!数据/。此目录中的每个文件都应为 .由 save(( 创建的 RData 文件包含单个对象(与文件同名(。

这将使包名称为 :d ata 的包的任何用户都可以访问数据集。

相关内容

  • 没有找到相关文章

最新更新