首页 > 解决方案 > 如何使用 tryCatch() 将 NA 添加到 data.frame?

问题描述

我正在创建一个对美国县执行协整的脚本。我正在尝试根据错误过滤我的数据。如果我正在执行的测试有一列全为零或全为 na 的数据,我会收到错误消息。当我的程序运行时,我有一个 tryCatch(),它基本上会跳过有该错误(或任何其他错误)的部分,并在出现错误时将数据导出为“NA”。虽然这不是一个永久的解决方案,但它目前是一种查看我正在分析的县有足够数据的方法。

在下面的代码片段中,我们有选择 k 值并将它们分配给向量的代码。

# k-value selector function
set_k_vals <- function(k_vals) {
 
  kval_length = as.integer(length(k_vals))
  
  for (i in 1:kval_length) {
    if (k_vals[i] < 2) {
      k_vals[i] = 2
    }
  }
  return(k_vals)
}

# before lag selection function call
k_vals_vector <- c(K_val1, K_val2, K_val3, K_val4, K_val5)
  
# after lag selection function call
k_vals <- set_k_vals(k_vals_vector)

然后,我们对导出的数据帧进行了初始化。

# exported data frame
exported_df <- data.frame(matrix(ncol = 8, nrow = 0))
x <- c("Location", "Start Date", "End Date", "Test ID", "Test Type", "Test Statistic", "0.05 Critical Value", "P Value")
colnames(exported_df) <- x

在这里,我们有 trycatch() 错误处理函数。如果没有错误,则继续。如果出现错误,我们会告诉代码跳到下一个县,并将 NA 附加到数据帧中县的位置。

johansen_error_handling <- function(k_vals){
  tryCatch(
    {
      jo_test = ca.jo(system1, type='trace', ecdet = 'const', K=k_vals[1])
      message("Everything went smoothly.")
      return(jo_test)
    },
    error=function(error_message) {
      message("And below is the error message from R:")
      message(error_message, "\n")
      skip_to_next <<- TRUE
      exported_df[nrow(exported_df) + 1,] = list(title,"NA","NA","NA","NA","NA","NA","NA")
      return(exported_df)
    }
  )

在对所有县进行分析之后,我有这个循环对变量进行排序并将它们添加到数据框中。

  for (i in 1:10) {exported_df[nrow(exported_df) + 1,] = list(title, start, end, test_ID[i], test_type[i], test_stat[i], crit_value[i], p_val[i])}

示例数据:

Location    Start Date  End Date    Test ID Test Type   Test Statistic  0.05 Critical Value P Value
Acadia-Louisiana-US 2020-02-15  2020-11-01  Air Temperature trace statistic 26.04672027 19.96   0.378952269

我的问题是exported_df 中没有显示任何NA 数据。我做错了什么吗?

注意:我对 R 还是很陌生,所以如果我的代码不是“r-like”,我深表歉意。

标签: rdataframetime-seriestry-catch

解决方案


推荐阅读