【问题标题】:How to catch which columns are throwing warnings in sapply?如何捕捉哪些列在 sapply 中抛出警告?
【发布时间】:2017-01-03 20:12:49
【问题描述】:

我有一个 df,它应该全是数字,但都是作为字符输入的。我正在尝试这个:

sapply(df, as.numeric)

会引发警告:

There were 50 or more warnings (use warnings() to see the first 50)

我可以忽略警告,但我想找出问题所在。如何找到正在/正在抛出警告的列?

这似乎相当基本,但我不知道如何获得它。

如果有帮助:

test <- as.data.frame(list(c("1","2","3"), c("1","poop","3")))
> sapply(test, as.numeric)
     c..1....2....3.. c..1....poop....3..
[1,]                1                   1
[2,]                2                  NA
[3,]                3                   3
Warning message:
In lapply(X = X, FUN = FUN, ...) : NAs introduced by coercion

我想要的是一个函数,它告诉我第 2 列是有问题的。

【问题讨论】:

  • warnings()[1:5] 显示什么? (可能会说某些因子变量被强制为 NA。)使用function(x){ as.numeric(as.character(x))} 会更安全
  • 可能有更好的方法来做到这一点,但您可以打印出该行并使用options(warn=2) 将警告转换为错误,以便在遇到错误时中断。
  • 为了将来参考,请包括一个可重现的例子(包括数据)
  • ?它是一个简单的字符数据框。重现字符数据帧是任意且相对简单的。我只需要知道是否有办法查看哪个抛出错误。
  • sapply(test, function(x) tryCatch(as.numeric(x), warning = function(w) "This one!!!"))

标签: r sapply


【解决方案1】:

感谢@RichScriven。

这行得通:

test2 <- sapply(test, function(x) tryCatch(as.numeric(x), warning = function(w) "This one!!!"))
which(test2 == "This one!!!")

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-05
    • 2019-04-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多