写R就像普通的lisp一样

时间:2013-03-07 20:06:41

标签: r common-lisp

我最近一直在学习普通的口齿不清,虽然我不是通过培训的程序员,但我真的很喜欢它。我注意到我想以不同的方式编写我的R代码。例如,此代码作为Verzani Simple R online book中代码的重新编写:

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 *的东西,它会大大改善。如果有人,知道我可以简洁地实现的方式请评论。

1 个答案:

答案 0 :(得分:2)

你这么说:

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)})))

值得一试:

local({
  p=0.5;m=50;n=20;alpha=0.1
  phat=rbinom(m,n,p)/n
  zstar=1-alpha/2
  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)
})

我休息我的情况。