【问题标题】:Skip over an error in a function [duplicate]跳过函数中的错误[重复]
【发布时间】:2015-05-27 15:32:12
【问题描述】:

我创建了一个函数,但出现了一些错误。但是,可以忽略这些错误。是否有任何功能可以用来跳过错误并继续按原样处理该功能?谢谢!

我使用 try 语句创建了一个函数,但仍然出现错误:

#Function to merge the data with the code descriptions.
myfunction = function(mydata){

  ##Sets the variables to factors to merge with the code descriptions.
  mydata[] <- lapply(mydata, factor)

  ##Adds "ID" to the end of all the variables to make the merges compatible.
  names(mydata) <- paste(names(mydata), "ID", sep = "")

  ##Uses the dplyr package to make the merges for the variables needed.
  try(mydata = mydata %>% left_join(dischargestatuscode, by = "DischargeStatusID") %>% select(-DischargeStatusID, -Code))
  try(mydata = mydata %>% left_join(statecode, by = "StateID") %>% select(-StateID, -Code))
  try(mydata = mydata %>% left_join(gendercode, by = "GenderID") %>% select(-GenderID, -Code))
  try(mydata = mydata %>% left_join(racecode, by = "RaceID") %>% select(-RaceID, -Code))
  try(mydata = mydata %>% left_join(agecode, by = "AgeID") %>% select(-AgeID, -Code, -(MinAge:MaxAge)))
  try(mydata = mydata %>% left_join(diagnosistypecode, by = "DiagnosisCodeTypeID") %>% select(-DiagnosisCodeTypeID, -Code))
  try(mydata = mydata %>% left_join(hcpcscode, by = "HCPCCodeID") %>% select(-HCPCCodeID, -Code))
  try(mydata = mydata %>% left_join(countycode, by = "CountyID") %>% select(-CountyID, -Code, -StateID))
  try(mydata = mydata %>% left_join(admissionsourcecode, by = "AdmissionSourceID") %>% select(-AdmissionSourceID, -Code))
  try(mydata = mydata %>% left_join(admissiontypecode, by = "AdmissionTypeID") %>% select(-AdmissionTypeID, -Code))
  try(mydata = mydata %>% left_join(msdrgcodes, by = "ClaimRelatedDRGID") %>% 
    select(-ClaimRelatedDRGID, -Code, -MdcCategoryID, -type))
  try(mydata = mydata %>% left_join(nchpatientstatuscode, by = "NCHPatientStatusID") %>% select(-NCHPatientStatusID, -Code))

  ##If there is a ICDAccessCode column, the first function works, if there is a ProcedureID column the second function works.
  try(mydata = mydata %>% left_join(icd9codes, by = "ICDAccessCodeID") %>% 
    select(-ICDAccessCodeID, -(ICD9Code:CodeType), -LongDescription))
  try(mydata = mydata %>% left_join(icd9codes, by = "ProcedureIDID") %>% 
    select(-ICDAccessCodeID, -(ICD9Code:CodeType), -LongDescription, -ProcedureIDID, -ICD9Desc))

  ##Removes the "ID" used for compatbility.
  names(mydata) <- gsub("ID", "", names(mydata))
  InpatientHistory <<- mydata
}

myfunction(InpatientHistory)

我使用 try 时遇到的错误:

Error in try(mydata = mydata %>% left_join(dischargestatuscode, by = "DischargeStatusID") %>%  : 
  unused argument (mydata = mydata %>% left_join(dischargestatuscode, by = "DischargeStatusID") %>% select(-DischargeStatusID, -Code))

【问题讨论】:

  • 投反对票,没有评论
  • = 不等同于 &lt;-。解析器认为您想为try 指定一个参数。使用&lt;-try 中分配。当然,如果您的某个表达式会引发错误,您可能不会得到预期的结果。您应该编写错误处理程序。并且不要使用&lt;&lt;--&gt;&gt;。这些应该只在非常特殊的情况下使用。遵循 R 的函数式语言范式。
  • 完美,谢谢大家的帮助!

标签: r


【解决方案1】:

在可能引发错误消息的函数周围使用tryCatch 表达式:

testFunction <- function (date_in) {
  return(tryCatch(as.Date(date_in), error=function(e) NULL))
}

如果您没有正确的错误处理功能,您也可以使用try,如 cmets 中所述,但 R 语言手册指出:

try 使用tryCatch 实现;用于编程,而不是 try(expr, silent = TRUE),类似tryCatch(expr, error = function(e) e)(或其他简单的错误处理函数)可能更多 高效灵活。

【讨论】:

  • 如果你没有使用正确的错误处理程序,你应该使用try
  • 谢谢,我认为它在正确的轨道上。我发布了我正在使用的功能,但我仍然收到错误消息。我可能做错了。抱歉,我现在才使用 R 大约一个月。
  • @ChristopherYee 你能发帖InpatientHistory 或者告诉我如何复制它吗?
  • 我真的希望我可以,但是这些数据是机密的,我会遇到很多麻烦哈哈。但它基本上是一个编码的医疗数据表,我希望将代码描述从各种描述表中放入。我不知道这是否有帮助。
  • 我明白了。他们通常希望您使用非敏感数据集(例如某些 R 包中内置的数据集)重现您的错误,然后在此处发布它的可重现版本。也许你可以加载类似data(AirPassengers) 的东西,看看你是否能得到同样的错误,然后把它贴在这里?
猜你喜欢
  • 1970-01-01
  • 2014-08-29
  • 2023-01-16
  • 1970-01-01
  • 2021-04-20
  • 2021-12-03
  • 2017-07-06
  • 2017-06-18
  • 1970-01-01
相关资源
最近更新 更多