【问题标题】:R: Improving outputR:提高输出
【发布时间】:2017-09-06 16:03:23
【问题描述】:

这是我使用 vars 包创建的用于测试平稳性的示例代码:

library(vars)
data(Canada)
Canada <- data.frame(Canada)

test = function(x) {
  adf <- ur.df(x, type = "trend", selectlags = "BIC")
  adf.out <- format(round(c(adf@teststat[1], head(adf@cval,1)[,c(1,2,3)]), 2), nsmall = 3)
  adf.comment <- if(adf.out[1] >= adf.out[3]) {"Yes"} else {"No"}

  kpss <- ur.kpss(x, type ="tau", use.lag = adf@lags)
  kpss.out <- format(round(c(kpss@teststat[1],head(kpss@cval, 1)[,c(4,2,1)]), 2), nsmall = 3)
  kpss.comment <- if(adf.out[1] >= adf.out[3]) {"Yes"} else {"No"}

  out <- c(adf.out, adf.comment, kpss.out, kpss.comment)
  out
}

test(Canada["prod"][,1])

输出:

> test(Canada["prod"][,1])
             1pct     5pct    10pct                       1pct     5pct    10pct          
"-2.020" "-4.040" "-3.450" "-3.150"     "No"  "0.490"  "0.220"  "0.150"  "0.120"     "No" 

为什么数字周围有“”,如何删除它们?

【问题讨论】:

  • format 将它们转换为字符。
  • 好的,如果我不包含 cmets,格式就可以解决问题。请注意,我使用“adf.comment”和“kpss.comment”更新了脚本。将这些引入输出时,所有项目再次出现问题?
  • 如果c(adf.out, adf.comment, kpss.out, kpss.comment) 中的任何元素是字符向量,那么生成的向量也将是字符类型。
  • 您想删除 R 控制台或您生成的外部文件中的引号吗?如果只是控制台,为什么要删除它们?

标签: r dataframe output time-series


【解决方案1】:

您在一个对象stringnumeric 中混合了两种R 数据类型。 R 不能在一个简单对象中携带两种数据类型。结果是将numeric 转换为string - 这由引号显示。当您将string 转换为numeric 时,您会创建NA,这意味着信息丢失,因此R 选择转换string 中的所有内容。

您可以将数据转换为data.frame(见下文)。因为data.frame 是一种复杂的数据类型,它可以为每一列保存不同的data.types。我不建议您出于光学目的使用data.frame。如果您想使用此数字进行计算,您可以稍后使用函数 as.numeric(out)string 转换为 numeric

test = function(x) {
  adf <- ur.df(x, type = "trend", selectlags = "BIC")
  adf.out <- format(round(c(adf@teststat[1], head(adf@cval,1)[,c(1,2,3)]), 2), nsmall = 3)
  adf.comment <- if(adf.out[1] >= adf.out[3]) {"Yes"} else {"No"}

  kpss <- ur.kpss(x, type ="tau", use.lag = adf@lags)
  kpss.out <- format(round(c(kpss@teststat[1],head(kpss@cval, 1)[,c(4,2,1)]), 2), nsmall = 3)
  kpss.comment <- if(adf.out[1] >= adf.out[3]) {"Yes"} else {"No"}

  out <- c(adf.out, adf.comment, kpss.out, kpss.comment)
  out <- data.frame(matrix(out, nrow=1, dimnames=list(NULL, names(out))))
  return(out)
}

test(Canada["prod"][,1])[,-1]

【讨论】:

  • 这似乎有帮助,谢谢!我只删除了最后一个“out
  • 你是对的......返回数据更好。您可以删除具有负索引的列。看我的编辑。如果您发现此答案有用,那么对答案进行投票也是一种好习惯;)
猜你喜欢
  • 2011-10-02
  • 1970-01-01
  • 2021-05-22
  • 2017-10-14
  • 2018-08-03
  • 2020-06-01
  • 2021-10-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多