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

R语言自定义meanAndsd函数结合hasArg()与rnorm()的问题咨询

代码错误点

  1. else分支中sd(rnorm=20)语法错误:rnorm()是独立的随机数生成函数,该写法会给sd()传入不存在的rnorm参数,无法正常执行。
  2. 虽然hasArg("x")的参数存在性判断逻辑可用,但R语言更推荐通过默认参数+missing()判断的方式实现需求,可读性和稳定性更高。

修正版本(基于原有逻辑修改)

meanAndsd <- function(x){ 
  if(hasArg("x")){
    av <- mean(x, na.rm=TRUE)
    sdev <- sd(x, na.rm=TRUE)
    size <- length(na.omit(x))
    c(mean=av, sd = sdev, size = size)
  }
  else { 
    # 正确调用rnorm生成20个正态分布随机数后计算标准差
    sd(rnorm(n = 20))
  }
}

运行效果:

  • 传入参数时调用meanAndsd(数值向量),返回均值、标准差、有效样本量三个统计值
  • 无参数调用meanAndsd()时,直接返回20个随机正态数的标准差

更符合R编码习惯的实现

用参数默认值+missing()判断实现,逻辑更清晰:

meanAndsd <- function(x = rnorm(n = 20)){ 
  # 判断参数是否为用户主动传入,是默认值则仅返回标准差
  if(missing(x)){
    return(sd(x))
  }
  # 用户传入参数的场景返回三个统计值
  av <- mean(x, na.rm=TRUE)
  sdev <- sd(x, na.rm=TRUE)
  size <- length(na.omit(x))
  c(mean=av, sd = sdev, size = size)
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 03:15:02