当“警告消息:未知或未初始化的列”确实应该是一个错误时

问题描述 投票:0回答:1

我多次遇到这样的情况:我在列名称中犯了错误,但当我使用该列时却创建了一条错误消息,R 将(不存在的)列的值设置为零,并刚刚产生了一条警告消息。 我希望使用不存在的列名来导致错误消息。7 我知道可以修改 R 选项来做到这一点,但我想知道是否可以针对特定警告消息执行此操作。

r warnings
1个回答
0
投票

问题在于,提取不存在的列会返回

NULL
,并且
help("sum")
表示“由于历史原因,
NULL
被接受并被视为
integer(0)
。”

您可以使用

stopifnot
断言来防止
NULL
值:

TestDF <- data.frame(A = c("a", "b", "c"), B = c(1,2,2), C = c(5,2,3)) 

CalSumBD <- function(df){ 
  returnval <- sum(df$B) + sum(df$D)
  return(returnval) 
  } 
CalSumBD(TestDF) 
#[1] 5

mySum <- function(..., na.rm = FALSE) {
  stopifnot("NULL value in input" = all(!is.null(c(...))))
  sum(..., na.rm = na.rm)
}

CalSumBD_save <- function(df){ 
  returnval <- mySum(df$B) + mySum(df$D)
  return(returnval) 
} 

CalSumBD_save(TestDF) 
#Error in mySum(df$D) : NULL value in input
© www.soinside.com 2019 - 2024. All rights reserved.