3

私は最近 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 が LET* のようなものを Lisp に持っていれば大幅に改善されるでしょう。誰かがそれを簡潔に達成できる方法を知っている場合は、コメントしてください。

4

1 に答える 1

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

私は自分のケースを休ませます。

于 2013-03-07T20:25:02.423 に答える