r - 我的函数在 R 控制台中有效,但在 R 脚本中无效

标签 r

我尝试编写一些函数来使用非中心参数计算方差分析功率和样本大小。

R 中有一些非常好的功能,但我的功能是从生物统计书中学习和复制思路......

尽管涉及到数学,但我的“nc”和“fpower”功能运行良好,正如预期的那样:

nc <- function(diff,n,sd) {
  nonc <- (diff^2/2)*(n/sd^2)
  return(nonc)
}

fpower <- function(k,n,diff,sd,alpha=0.05) {
  nonc <- nc(diff,n,sd)
  dfn <- k - 1
  dfd <- k*(n-1)
  f1 <- qf(1-alpha,dfn,dfd)
  f2 <- pf(f1,dfn,dfd,nonc)
  return(1-f2)
}

但是,我的“fsample”没有按预期工作。返回 2,seq 中的第一个 n。
fsample <- function(k,diff,sd,alpha=0.05,power=0.9){
  for(n in 2:5000){
    if ( fpower(k,n,sd,alpha) >= power) break
  }
  return(n)
}

但是,如果我“手动”在控制台中运行此代码,它会按预期工作!!
并返回正确的 n 值。

怎么了?

最佳答案

您没有通过 diff论据 fpower ,因此参数与您认为的顺序不同。 fsample应该是:

fsample <- function(k,diff,sd,alpha=0.05,power=0.9){
  for(n in 2:5000){
    if ( fpower(k,n,diff,sd,alpha) >= power) break
  }
  return(n)
}

请注意,如果您在调用 fpower 时已命名参数,则这不会成为问题。因为你会收到关于 diff 的错误丢失且没有默认值:
# this will error
fsample <- function(k,diff,sd,alpha=0.05,power=0.9){
  for(n in 2:5000){
    if ( fpower(k=k,n=n,sd=sd,alpha=alpha) >= power) break
  }
  return(n)
}

此外,您可能希望避免为数据对象提供与函数相同的名称(例如 diffsdpower 也是函数),否则您可能会混淆自己。

关于r - 我的函数在 R 控制台中有效,但在 R 脚本中无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12483298/

相关文章:

r - 使用插入符号进行生存分析(随机生存林)

html - 从 OECD 抓取表格

r - 为什么 rasterToPoints 在第一次调用而不是第二次调用时生成错误?

r - 计算选定列的非空白单元格数量

r - 使用 summarise_each() 计算忽略 NA 的记录

r - 将向量中的唯一值对相乘并对结果求和

r - 展开一个系列,然后填充剩余的列

r - 如何在一个函数中使用多个代码在 R 中应用 "sapply"?

r - R 中每多列的每个行名(1、2 或 A、B..)的最大值

r - 如何禁用马赛克图中的 y 轴?