【问题标题】:Variables inside the function are not getting stored in the global environment in R programming [duplicate]在R编程中,函数内部的变量没有存储在全局环境中[重复]
【发布时间】:2017-07-14 12:51:01
【问题描述】:

函数内部的变量不会存储在 R 编程中的全局变量中。看代码sn -p:

install.packages('HMM')
library('HMM')

hmm_source <- function(){

  lamba_1 <- initHMM(c("s1","s2"), c("a","b","c"), c(1,0), matrix(c(.1,.6,.9,.4),nrow = 2,ncol = 2),matrix(c(.1,.4,.3,.2,.6,.4),nrow = 2,ncol = 3))

  lamba_2 <- initHMM(c("s1","s2"), c("a","b","c"), c(1,0), matrix(c(.4,.8,.6,.2),nrow = 2,ncol = 2),matrix(c(.5,.2,.4,.1,.1,.7),nrow = 2,ncol = 3))

  return(list(m1=lamba_1,m2=lamba_2))
}
source1_2 <- hmm_source()install.packages('HMM')
library('HMM')

hmm_source <- function(){

  lamba_1 <- initHMM(c("s1","s2"), c("a","b","c"), c(1,0), matrix(c(.1,.6,.9,.4),nrow = 2,ncol = 2),matrix(c(.1,.4,.3,.2,.6,.4),nrow = 2,ncol = 3))

  lamba_2 <- initHMM(c("s1","s2"), c("a","b","c"), c(1,0), matrix(c(.4,.8,.6,.2),nrow = 2,ncol = 2),matrix(c(.5,.2,.4,.1,.1,.7),nrow = 2,ncol = 3))

  return(list(m1=lamba_1,m2=lamba_2))
}
source1_2 <- hmm_source()

这里我的函数返回两个 hmm 模型,但变量 lamba_1 和 lamba_2 没有保存在 R 的全局环境中。我在 RStudio 中工作,虽然我也尝试在 R shell 中运行代码。但它总是给我错误:找不到对象lamba_1。有什么帮助吗?

【问题讨论】:

  • 对象在您分配时存储。因此,当您执行source1_2 &lt;- hmm_source() 时,您的结果是一个list,以您给它的名称命名:source1_2
  • 使用&lt;&lt;-将对象存储在全局环境中的函数内。
  • 它们被保存为source1_2$m1source1_2$m2。我不建议使用&lt;&lt;- 分配它们的方式 - 否则您将覆盖 GlobalEnv 中的变量。我认为这不是一个很好的函数副作用用例
  • @count 这是一个相当糟糕的建议……
  • @count 这不是他们的意思——一般不要这样做

标签: r


【解决方案1】:

在函数中创建的对象不会存储到全局环境中(默认情况下,无论如何)。如果您返回 lambda_1 和 lambda_2,它们将是返回对象的元素。它们不会单独存在,但从你调用函数的方式来看,它们应该以source1_2$m1source1_2$m2 的形式存在。

【讨论】:

    猜你喜欢
    • 2016-09-30
    • 2012-10-20
    • 1970-01-01
    • 1970-01-01
    • 2012-12-12
    • 1970-01-01
    • 1970-01-01
    • 2017-05-26
    相关资源
    最近更新 更多