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

如何修改R函数提取sampleN.TOST的样本量Ns并生成列表?

问题分析与解决

你的函数出现空输出的核心原因有两个:

  1. 循环内重复初始化列表:result = list()放在循环内部,每次迭代都会清空之前的结果,最终result仅保留最后一次循环的内容,甚至可能因为赋值逻辑问题导致为空。
  2. 返回类型不符合需求:你需要的是列表,但函数返回了data.frame(result),如果result赋值失败就会生成空数据框。

修正后的函数(命名列表)

如果需要每个样本量对应其功效值的命名列表,使用以下代码:

pwr.vec = c(0.80, 0.85, 0.90)

sample.3.cross = function(x, pwr.vec){
  # 提前初始化空列表,避免循环内重置
  result = list()
  
  for (i in seq_along(pwr.vec)){
    target_pwr = pwr.vec[i]
    # 提取样本量
    sample.size = sampleN.TOST(CV = x, design = "3x3", targetpower = target_pwr, theta0 = 1.11)[['Sample size']]
    # 以功效值为名称存储样本量
    result[[as.character(target_pwr)]] = sample.size
  }
  
  return(result)
}

修正后的函数(无命名简单列表)

如果只需要单纯的无索引列表,使用以下代码:

pwr.vec = c(0.80, 0.85, 0.90)

sample.3.cross = function(x, pwr.vec){
  # 提前创建指定长度的列表
  result = vector("list", length(pwr.vec))
  
  for (i in seq_along(pwr.vec)){
    sample.size = sampleN.TOST(CV = x, design = "3x3", targetpower = pwr.vec[i], theta0 = 1.11)[['Sample size']]
    result[[i]] = sample.size
  }
  
  return(result)
}

调用示例

执行sample.3.cross(.23, pwr.vec)后,会得到包含三个样本量的列表,比如命名列表的输出类似:

$`0.8`
[1] 18

$`0.85`
[1] 21

$`0.9`
[1] 24

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 04:45:44