R语言自定义meanAndsd函数结合hasArg()与rnorm()的问题咨询
代码错误点
- else分支中
sd(rnorm=20)语法错误:rnorm()是独立的随机数生成函数,该写法会给sd()传入不存在的rnorm参数,无法正常执行。 - 虽然
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
相关产品推荐
相关产品推荐

