【问题标题】:Why would an R function not write to the environment?为什么 R 函数不会写入环境?
【发布时间】:2015-02-04 02:04:19
【问题描述】:

我正在尝试在 R 中编写一个相对简单的 AR(1) 表示。我找不到此代码有任何明显的问题,而且我返回的不是错误,它不是写入环境或识别areone2 作为一个函数。任何建议将不胜感激。

areone2<-function(y,N,p,d){
  yvec<-c(rep(y, times = N))
  for(i in 1:N){
    yvec[i+1]<-
      ((1+p*(yvec[i]-d))
      + d)
               }
  plot(yvec, type='l', xlab="N", ylab="yeild")
                          }

areone2(.3,10,.9,.2)

【问题讨论】:

  • 我很确定这是因为你在yvec[i+1]&lt;- ((1+p*(yvec[i]-d)) + d)中打断了电话
  • 也试过了,不幸的是没有任何改变
  • 我不太明白。这没有引发错误,它确实创建了一个情节,并且您的代码显示不努力向控制台发送消息。那么问题到底出在哪里???你是那个“没有写给环境”的人。如果您希望从函数中重新生成一个值,那么您 a) 应该这样做并且 b) 需要将其分配给符号。

标签: r for-loop graph plot autoregressive-models


【解决方案1】:

它不会触发错误或警告,因为您在二进制操作的中间换行,但解析器无法识别该二进制操作。以+ 3 开头是完全合法的,只是3,这不是你想要的。

例如,我们希望 2 + 3 等于 5。但是在新行上 +3 不会将其添加到上一行

> 2        ## break the line here and R returns 2
[1] 2
> +3       ## adding three next is not recognized as a continuation of a call
[1] 3

但是,如果将调用括在括号中(不是方括号),您仍然可以换行

(2 
 + 3)
# [1] 5   ## correct
{2 
 + 3} 
# [1] 3   ## incorrect

将您的yvec[]&lt;- 分配调用放在一条线上是更清洁、更安全的方式。

yvec[i+1] <- ((1+p*(yvec[i]-d)) + d)  

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-03-27
    • 2018-04-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-02
    相关资源
    最近更新 更多