【问题标题】:R: transforming vector of objects in a vector of object namesR:将对象向量转换为对象名称向量
【发布时间】:2021-06-02 07:29:10
【问题描述】:

上下文:我正在使用 R 包 rugarch 估计几种不同的规范。以 2 为例(y 是数据):

garchmodel<-ugarchspec()
garchfit = ugarchfit(spec=garchmodel, y)
egarchmodel<-ugarchspec(variance.model = list(model = "eGARCH")
egarchfit<-ugarchfit(spec=egarchmodel, y)

我写了一个函数来收集模型的信息标准:

CollectInfoCrieria <- function(models){
  infoMat <- t(sapply(models, infocriteria))
  return(infoMat)  
}

如果我然后输入

themodels = c(garchfit, egarchfit)
CollectInfoCrieria(themodels)

我获得了一个矩阵,其中包含每行每个模型规范的信息标准。我想将模型名称转换为字符串以用作行名称,如我所愿。 如果我再定义一个函数

getName<-function(names) deparse(substitute(names))

然后 getName(garchfit) 给出“garchfit”,而

models <- c(garch11fit, egarchfit)
sapply(models, getName)

给予 [1] "X[[i]]" "X[[i]]"

我怎样才能得到

[1] "garch11fit" "egarchfit"

【问题讨论】:

    标签: r string loops object


    【解决方案1】:

    这是在CollectInfoCrieria 函数中收集对象名称的方法:

    CollectInfoCrieria <- function(...){
      infoMat <- t(sapply(c(...), infocriteria))
      models = as.character(eval(substitute(alist(...))));
      out = data.frame(models,infoMat)
    }
    

    【讨论】:

      【解决方案2】:
      garch11fit=1
      egarchfit=2
      models <- c(garch11fit=garch11fit, egarchfit=egarchfit)
      names(models)
      

      如果你命名变量,你可以取回它们的名字。但是在您的代码中,模型变量中没有关联名称,只有 garch11fit 和 egarchfit 的值,因此您无法取回名称。

      【讨论】:

      • 谢谢@Stacker。这比我想象的要容易,我不必使用函数和sapply。我仍然不明白为什么getName(garchfit) 给出garchfit 而不必命名它,但是对象向量和sapply 的行为不同
      猜你喜欢
      • 2017-04-20
      • 1970-01-01
      • 2016-07-07
      • 1970-01-01
      • 2015-07-09
      • 2014-01-27
      • 2014-08-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多