【发布时间】:2019-11-13 16:31:20
【问题描述】:
我正在尝试编写一个函数来根据不同的评分系统绘制 ROC 曲线,我必须预测结果。
我有一个数据框 data_all,其中包含“score_1”和“Threshold.2000”列。我根据需要生成 ROC 曲线:
plot.roc(data_all$Threshold.2000, data_all$score_1)
我的目标是为许多不同的结果(例如 Threshold.1000)和分数(score_1、score_2 等)生成 ROC 曲线,但我最初试图为不同的分数设置它。我的功能如下:
roc_plot <- function(dataframe_of_interest, score_of_interest) {
plot.roc(dataframe_of_interest$Threshold.2000, dataframe_of_interest$score_of_interest)}
我收到以下错误: roc.default(x, predictor, plot = TRUE, ...) : 未提供有效数据。
如果有人能找出我的功能不起作用的原因,我将不胜感激!我是一名 python 编码员,对 R 来说是新人,但尝试了许多不同的事情并没有太多运气。非常感谢。
编辑: 这是与 mtcars 相同的示例,因此可以重现:
data(mtcars)
plot.roc(mtcars$vs, mtcars$mpg) # --> makes correct graph
roc_plot <- function(dataframe_of_interest, score_of_interest) {
plot.roc(dataframe_of_interest$mpg, dataframe_of_interest$score_of_interest)}
结果: roc.default(x, predictor, plot = TRUE, ...) 中的错误:未提供有效数据。 roc_plot(mtcars, vs)
【问题讨论】:
-
请提供您的数据样本,因为错误是基于您的数据。您可以为此使用
head()或dput()。如果您不允许共享数据,请尝试使用 mtcars 等基本数据集重现您的错误 -
谢谢,我已经编辑它以包含 mtcars 作为示例
-
这是一个基本的理解问题。函数声明如下:
roc_plot <- function(x, y) {plot.roc(x, y)},然后在调用它时填充x,y:roc_plot(mtcars$vs, mtcars$mpg)。实际上它与python中的相同。当您使用 $ 时,您尝试调用数据框的列名。此外,如果您想始终调用同一列,则可以通过过滤来实现。 -
当您想始终调用相同的列时:
roc_plot <- function(dataframe_of_interest, score_of_interest) { plot.roc(dataframe_of_interest$vs, dataframe_of_interest$mpg)} roc_plot(mtcars, mtcars)请注意,您在mtcars示例中使用了错误的变量名称。您将第一个调用更改为$mpg$,但第二个仍然是score_of_interest,因为没有这样的列,所以您收到错误 -
非常感谢您的帮助!我很感激