首页 > 解决方案 > as.Date() 在函数内部产生 NA,但在函数外部工作

问题描述

我有一家电信公司的数据集(截图 1截图 2),其中每一行代表一个客户。我正在尝试为每个客户模拟订阅结束日期,但是当我调用 getSubscriptionEndingDate() 时出现 2 个错误。我的猜测是,一旦我弄清楚如何摆脱第二个错误(在 as.Date(as.numeric(client$subscriptionDates) + randomDaysOfService: NAs 由强制引入) ,第一个错误就会得到解决。我试过运行它在函数之外,它工作得很好.有什么想法为什么我在调用函数时会得到 NAs 吗?

我在网上找不到答案,我不知道该尝试什么。我是 R 新手,这是我第一次在这里发帖,所以请多多包涵:)

# Function Call
getSubscriptionEndingDate <- function(client) {
   client <- as.list(client)
   
   isRandomDaysOfServiceNegative = TRUE
   while (isRandomDaysOfServiceNegative) {
      randomDaysOfService <- round(rnorm(1, 540+as.numeric(client$numberOfAdditionalDaysOfService), 150))
      if(randomDaysOfService > 0){isRandomDaysOfServiceNegative = FALSE}
   }
   
   subscriptionEndingDate <- as.Date(as.numeric(client$subscriptionDates)+randomDaysOfService, origin = "1970-01-01")
   if(subscriptionEndingDate > Sys.Date()){
      return(NA)
   } else {
      return(subscriptionEndingDate)
   }
}
subscriptionEndingDate <- apply(telcoDataset, 1, getSubscriptionEndingDate)
#> Error in if (subscriptionEndingDate > Sys.Date()) { : 
#>   missing value where TRUE/FALSE needed
#> In addition: Warning message:
#> In as.Date(as.numeric(client$subscriptionDates) + randomDaysOfService,  :
#>   NAs introduced by coercion

# Outside of function
x <- as.list(telcoDataset[1, ])

isRandomDaysOfServiceNegative = TRUE
while (isRandomDaysOfServiceNegative) {
   randomDaysOfService <- round(rnorm(1, 540+as.numeric(x$numberOfAdditionalDaysOfService), 150))
   if(randomDaysOfService > 0){isRandomDaysOfServiceNegative = FALSE}
}

as.Date(as.numeric(x$subscriptionDates)+randomDaysOfService, origin = "1970-01-01")

reprex 包于 2021-08-04 创建 (v2.0.0 )

会话信息
sessioninfo::session_info()
#> - Session info ---------------------------------------------------------------
#>  setting  value                       
#>  version  R version 4.1.0 (2021-05-18)
#>  os       Windows 10 x64              
#>  system   x86_64, mingw32             
#>  ui       RTerm                       
#>  language (EN)                        
#>  collate  English_Canada.1252         
#>  ctype    English_Canada.1252         
#>  tz       America/New_York            
#>  date     2021-08-04                  
#> 
#> - Packages -------------------------------------------------------------------
#>  package     * version date       lib source        
#>  backports     1.2.1   2020-12-09 [1] CRAN (R 4.1.0)
#>  cli           3.0.0   2021-06-30 [1] CRAN (R 4.1.0)
#>  crayon        1.4.1   2021-02-08 [1] CRAN (R 4.1.0)
#>  digest        0.6.27  2020-10-24 [1] CRAN (R 4.1.0)
#>  ellipsis      0.3.2   2021-04-29 [1] CRAN (R 4.1.0)
#>  evaluate      0.14    2019-05-28 [1] CRAN (R 4.1.0)
#>  fansi         0.5.0   2021-05-25 [1] CRAN (R 4.1.0)
#>  fs            1.5.0   2020-07-31 [1] CRAN (R 4.1.0)
#>  glue          1.4.2   2020-08-27 [1] CRAN (R 4.1.0)
#>  highr         0.9     2021-04-16 [1] CRAN (R 4.1.0)
#>  htmltools     0.5.1.1 2021-01-22 [1] CRAN (R 4.1.0)
#>  knitr         1.33    2021-04-24 [1] CRAN (R 4.1.0)
#>  lifecycle     1.0.0   2021-02-15 [1] CRAN (R 4.1.0)
#>  magrittr      2.0.1   2020-11-17 [1] CRAN (R 4.1.0)
#>  pillar        1.6.1   2021-05-16 [1] CRAN (R 4.1.0)
#>  pkgconfig     2.0.3   2019-09-22 [1] CRAN (R 4.1.0)
#>  purrr         0.3.4   2020-04-17 [1] CRAN (R 4.1.0)
#>  reprex        2.0.0   2021-04-02 [1] CRAN (R 4.1.0)
#>  rlang         0.4.11  2021-04-30 [1] CRAN (R 4.1.0)
#>  rmarkdown     2.9     2021-06-15 [1] CRAN (R 4.1.0)
#>  sessioninfo   1.1.1   2018-11-05 [1] CRAN (R 4.1.0)
#>  stringi       1.6.1   2021-05-10 [1] CRAN (R 4.1.0)
#>  stringr       1.4.0   2019-02-10 [1] CRAN (R 4.1.0)
#>  styler        1.5.1   2021-07-13 [1] CRAN (R 4.1.0)
#>  tibble        3.1.2   2021-05-16 [1] CRAN (R 4.1.0)
#>  utf8          1.2.1   2021-03-12 [1] CRAN (R 4.1.0)
#>  vctrs         0.3.8   2021-04-29 [1] CRAN (R 4.1.0)
#>  withr         2.4.2   2021-04-18 [1] CRAN (R 4.1.0)
#>  xfun          0.24    2021-06-15 [1] CRAN (R 4.1.0)
#>  yaml          2.2.1   2020-02-01 [1] CRAN (R 4.1.0)
#> 
#> [1] C:/Users/Philippin Phallus/Documents/R/win-library/4.1
#> [2] C:/Program Files/R/R-4.1.0/library

标签: rnaas.date

解决方案


推荐阅读