You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何按因子(物种sp)分组在循环内运行自定义采样函数?

解决分组内采样问题

当前代码的问题在于将整个数据框的x和v传入函数f,导致采样时跨所有物种混合。要实现按sp分组内采样,需通过data.table的by=sp参数实现分组操作,让每个物种组独立执行采样逻辑。

修改后的完整代码

set.seed(100)
x <- c(1,1,1,1,1,1,2,3,4,5,11,11,11,11,11,500,782,234,124,566)
v <- c(1,1,1,1,1,1,2,3,4,5,11,11,11,11,11,60,80,123,44,55)
sp <- rep(c("A", "B", "C", "D"), each=5)

df <- data.frame(x, v, sp)
df$sp <- as.factor(df$sp)

library(data.table)
setDT(df)

f <- function(x, v) {
  v.sample <- sample(v, length(v), replace=TRUE)
  y.sample <- (v.sample/x^2) - (1/x)
  per <- cor(y.sample, x, use="complete.obs")
  data.frame(v.sample = v.sample, y.sample = y.sample, rand.cor = per)
}

# 核心修改:按sp分组应用函数,再循环生成9次结果
result <- rbindlist(
  lapply(1:9, function(i) {
    df[, c(f(x, v), .(x = x, v = v, sp = sp)), by = sp][, i := i]
  })
)

关键修改说明

  • by=sp:指定按物种分组,每个分组独立调用f(x, v),确保采样仅在当前物种的v子集内进行。
  • c(f(x, v), .(x = x, v = v, sp = sp)):将函数返回的采样结果与原数据的x、v、sp字段合并,保留分组原始信息。
  • 循环1-9次生成重复实验结果,每次循环添加i标记区分不同实验批次。

验证效果

查看物种A的采样结果,确认仅包含组内的1:

result[sp == "A", unique(v.sample)]
# 输出:[1] 1

内容的提问来源于stack exchange,提问作者Rspacer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 01:27:41