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

如何在R语言循环输出中打印随机化后的关联参数?

解决方法

你的问题出在函数f只返回了相关系数一个标量,而你在df[, .(rand.cor = f(x,v), x, v), sp]里加的x和v是原数据表的原始列,不是抽样后和y.sample对应的数值。要把抽样后的v.sample、对应的x、y.sample都保留下来,得修改函数让它返回完整的结果集,再整合到最终的result里。

修改后的完整代码如下:

set.seed(333)
J <- rnorm(40, 5, 1)
x <- rnorm(40, 2, 1)
v <- rnorm(40, 10, 1)
sp <- rep(c("A", "B", "C", "D"), each=10)

df <- data.frame(J, x, v, sp)

library(data.table)
setDT(df)

# 修改函数,返回包含所有需要变量的data.table
f <- function(x, v) {
  v.sample <- sample(v, length(v), replace=TRUE)
  y.sample <- (v.sample/x^2) - (1/x)
  rand.cor <- cor(y.sample, x, use="complete.obs")
  # 返回包含x、抽样后的v、y.sample和相关系数的表
  data.table(x = x, v.sample = v.sample, y.sample = y.sample, rand.cor = rand.cor)
}

# 生成999次迭代的结果
result <- rbindlist(
  lapply(1:999, function(i) {
    # 按物种分组运行函数,再添加迭代次数i
    df[, f(x, v), by = sp][, i := i]
  })
)

关键改动说明

  • 函数f不再只返回单个相关系数,而是返回一个包含x(原始x,因为你没对x抽样)、v.sample(抽样后的v值)、y.sample(计算出的样本值)、rand.cor(相关系数)的data.table
  • 在lapply的每次迭代里,按sp分组调用f,这样每个物种都会单独完成一次抽样计算,然后给每组结果加上当前的迭代序号i
  • 最终的result里,每一行对应某一次迭代、某一个物种下的一条观测,包含了你需要的所有变量:物种sp、迭代次数i、原始x、抽样的v.sample、计算出的y.sample、相关系数rand.cor

内容的提问来源于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 22:00:13