Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
编写R-likecommonlisp_R_Common Lisp - Fatal编程技术网

编写R-likecommonlisp

编写R-likecommonlisp,r,common-lisp,R,Common Lisp,我最近一直在学习CommonLisp,虽然我不是一名经过培训的程序员,但我真的很喜欢它。我已经注意到,我想写我的R代码不同,因为它。例如,此代码是对以下代码的重新处理: 这是用R写的一种合理且惯用的方式,还是仅仅是从另一种语言学习的一种方式?我个人喜欢我可以绑定变量一次,然后不必使用赋值和一般的外观 Verzani书中的代码如下所示,以供比较(Dason建议进行更改): 编辑:正如Spacedman所指出的,这比我的版本更简洁,如果R在lisp中有类似LET*的东西,我的版本会有很大的改进。如果

我最近一直在学习CommonLisp,虽然我不是一名经过培训的程序员,但我真的很喜欢它。我已经注意到,我想写我的R代码不同,因为它。例如,此代码是对以下代码的重新处理:

这是用R写的一种合理且惯用的方式,还是仅仅是从另一种语言学习的一种方式?我个人喜欢我可以绑定变量一次,然后不必使用赋值和一般的外观

Verzani书中的代码如下所示,以供比较(Dason建议进行更改):

编辑:正如Spacedman所指出的,这比我的版本更简洁,如果R在lisp中有类似LET*的东西,我的版本会有很大的改进。如果有人知道我能简明扼要地做到这一点的方法,请评论

你是说:

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

我的案子到此为止

如果你喜欢,那就继续做下去。我觉得很难阅读。不过,这只是我的看法。因为这个问题询问的是关于风格的意见,而不是一个具体的编程问题,所以我投票认为这不是建设性的。@andrie我同意一个人可以用任何想要的风格编写自己的代码,但我更感兴趣的是,它是否会被视为习惯用法,足以用于更持久的代码,例如在开放源码项目中。请以更为R-ish的方式重写您的示例,并比较可读性和调试性。嵌套函数似乎可能会在某个时候崩溃。已在帮助中警告您不要在函数中使用它。如果您需要可以存储常量的环境,您可能需要查看引用类。谢谢@dwin,我没有注意到这个警告。我以前没有仔细研究过引用类,但现在我想我会的。Verzani的原始版本肯定更简洁,但第一个版本没有向名称空间添加符号,因此在这个意义上做得更多,它允许将初始化与赋值分离。如果尝试采用更实用的风格,希望尽可能避免任务。公平地说,这两种风格并不完全相同,因为第一种实际上不会污染全球环境。您需要包装对
local
或类似对象的调用,以使它们更加等效
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)
})