gpt4 book ai didi

r - Sweave/knitr 实现中的 mean 和 sem 函数

转载 作者:行者123 更新时间:2023-12-01 12:48:08 25 4
gpt4 key购买 nike

我正在集思广益,为 Sweave/knitr 编写一个 mean 和 sem 函数。据我所知,它看起来像这样

m.se <- function (x, na.rm = TRUE) {
if (na.rm)
x <- x[!is.na(x)]
n <- length(x)
if (n == 0)
return(c(mean = NA, sem = NA))
xbar <- sum(x)/n
se <- sqrt(sum((x - xbar)^2)/(n - 1))/sqrt(n)
c(mean = xbar, sem = se)
return(paste(xbar,"\\pm",se))
}

它确实做了一些工作,它给出的输出如下:

43.9303846153846 \pm 3.34823050767781

问题是它不遵守我在主环境(knitr 中的设置 block )中定义的 option()。我该如何解决这个问题。

最佳答案

您的均值和标准差代码不是最优的。正如 Dieter Menne 提到的,您可以简单地使用内置的 mean()sd()如果您这样做不是为了锻炼目的。

knitr package 为更好地打印数字做出了很多努力,我建议您使用这些工具而不是发明自己的格式规则。请参阅下面的解决方案( \Sexpr{} 将尊重 options('digits') ):

\documentclass{article}
\begin{document}

<<mean-sem>>=
options(digits = 3)
m.se <- function (x, ...) {
n <- length(x)
if (n == 0) return(c(mean = NA, sem = NA))
se <- sd(x, ...)/sqrt(n)
c(mean = mean(x, ...), sem = se)
}
res <- m.se(rnorm(100))
@

What you want is $\Sexpr{res['mean']} \pm \Sexpr{res['sem']}$.

\end{document}

更重要的是,这是一个可移植的解决方案——如果您想要一个 HTML 版本,您只需编写 <!--rinline res['mean']--> ± <!--rinline res['sem']--> ,并且您不必重新定义 R 函数。

关于r - Sweave/knitr 实现中的 mean 和 sem 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14145738/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com