gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 18:58:36 26 4
gpt4 key购买 nike

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

这些可接受的值(value)观是从另一个组织给我的​​。它们位于 .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告诉我 x 的哪些值在 user有效:
   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")测试我的包裹。相关 session 信息:
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))
)
}

关于r - 如何在 R 包中的函数内使用数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45044269/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com