gpt4 book ai didi

r dplyr sample_frac 在数据中使用种子

转载 作者:行者123 更新时间:2023-12-03 19:57:17 26 4
gpt4 key购买 nike

我有一个分组数据框,其中分组变量是SEED .我想采用由 SEED 的值定义的组, 将种子设置为 SEED 的值对于每个组,然后使用 dplyr::sample_frac 对每个组的行进行洗牌.但是,我无法复制我的结果,这表明种子设置不正确。

dplyr 中执行此操作-ish方式,我写了以下函数:

> library(dplyr)
> ss_sampleseed <- function(df, seed.){
> set.seed(df$seed.)
> sample_frac(df, 1)
> }

然后我在我的数据上使用这个函数:
> dg <- structure(list(Gene = c("CAMK1", "ARPC4", "CIDEC", "CAMK1", "ARPC4", 
> "CIDEC"), GENESEED = c(1, 1, 1, 2, 2, 2)), class = c("tbl_df",
> "tbl", "data.frame"), row.names = c(NA, -6L), .Names = c("Gene",
> "GENESEED"))

> dg2 <- dg %>%
> group_by(GENESEED) %>%
> ss_sampleseed(GENESEED)

> dg2
Source: local data frame [6 x 2]
Groups: GENESEED

Gene GENESEED
1 ARPC4 1
2 CIDEC 1
3 CAMK1 1
4 CIDEC 2
5 ARPC4 2
6 CAMK1 2

但是,当我重复上述代码时,我无法复制我的结果。
> dg2
Source: local data frame [6 x 2]
Groups: GENESEED

Gene GENESEED
1 ARPC4 1
2 CAMK1 1
3 CIDEC 1
4 CAMK1 2
5 ARPC4 2
6 CIDEC 2

最佳答案

这里的问题是美元符号不会替代您传递的参数。请参阅此最小示例:

df <- data.frame(x = "x", GENESEED = "GENESEED")
h <- function(df,x){
df$x
}
h(df, GENESEED)
[1] x
Levels: x

h返回 x即使您要求 GENESEED .所以你的函数实际上是试图得到 df$seed不存在所以它返回 NULL .

但还有一个问题。即使纠正这一点并直接传递种子,它似乎也不会如您所愿,因为,如果您查看 sample_frac 的代码, dplyr 最终将运行以下行:
sampled <- lapply(index, sample_group, frac = TRUE, tbl = tbl, 
size = size, replace = replace, weight = weight, .env = .env)

请注意,它运行了 lapply 您设置了种子,因此您不会根据 GENESEED 为每个组定义不同的种子。如你所愿。

考虑到这一点,我想出了这个解决方案,使用 sample.intdo :
ss_sampleseed <- function(x){ 
set.seed(unique(x$GENESEED))
x[sample.int(nrow(x)), ]
}

dg %>% group_by(GENESEED) %>% do(ss_sampleseed(.))

这似乎可以如您所愿。

关于r dplyr sample_frac 在数据中使用种子,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31039885/

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