【发布时间】: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!!!"))