我最近一直在学习 common lisp,虽然我不是受过培训的程序员,但我真的很喜欢它。我注意到我想因此而以不同的方式编写我的 R 代码。例如,此代码作为Verzani Simple R 在线书籍中代码的重新工作:
with(list(p=0.5, m=50, n=20, alpha=0.1),
with(list(phat=rbinom(m,n,p)/n, zstar=1-alpha/2),
with(list(SE=sqrt((1-phat)*phat/n)),{
matplot(rbind(phat-SE*zstar,phat+SE*zstar),
rbind(1:m,1:m), type='l',
lty=1)
abline(v=p)})))
这是用 R 编写的一种合理且合理的惯用方式,还是仅仅是从另一种语言中获取方法的一种情况?我个人喜欢我可以绑定一次变量,然后不必使用赋值和一般的外观和感觉。
Verzani 书中的代码如下进行比较(由 Dason 建议进行了更改):
local({
m=50;
n=20;
p=.5;
phat=rbinom(m,n,p)/n
SE = sqrt(phat*(1-phat)/n)
alpha = 0.10;zstar= qnorm(1-alpha/2)
matplot(rbind(phat-zstar*SE,phat+zstar*SE), rbind(1:m,1:m),type="l",lty=1)
abline(v=p)})
编辑:正如 Spacedman 所指出的,这比我的版本更简洁,如果 R 在 lisp 中有类似 LET* 的东西,这将大大改进。如果有人知道我可以简洁地实现这一目标的方法,请发表评论。