for 循环中的图形
Graph in for loop
如有任何帮助,我们将不胜感激。
我正在尝试绘制 80 列的 ROC 曲线,代码如下:
pred <- prediction(df$x, label)
perf <- performance(pred,"tpr","fpr")
plot(perf,colorize=TRUE)
现在我想每次绘制列并将其放入
df$x
然后计算 pred,然后计算 perf,然后绘制它(我必须对 80 列进行计算)。
现在,这是我写的代码,我知道它不正确,但不知道如何让它工作
for (i in 1:ncol(df)){
pred <- prediction(df$x[i], label)
perf <- performance(pred,"tpr","fpr")
plot(perf,colorize=TRUE)}
这是我数据的前几行:
label x1 x2 x3 x4 x5 x6 x7 x8
1 0 34.96667 41.93333 54.30000 42.93333 24.40000 48.50000 42.73333 33.86667
2 0 79.00000 25.20000 95.43333 75.23333 31.50000 88.96667 83.60000 75.30000
3 0 16.10000 15.80000 17.13333 27.23333 35.10000 18.90000 14.66667 40.00000
4 0 61.90000 23.96667 74.23333 57.23333 45.50000 69.70000 61.80000 58.00000
5 0 31.40000 18.40000 42.16667 41.13333 55.86667 39.90000 32.33333 45.50000
x9 x10 x11 x12 x13 x14 x15 x16
1 11.366667 22983.00 15302.67 111186.67 781.3333 338140.0 2457099 13078.3333
2 20.200000 22750.33 16278.00 118196.67 156.6333 347375.7 2522140 405.6667
3 -10.100000 23812.33 13035.00 90846.67 -1758.3333 371015.7 2583397 11148.6667
4 17.000000 25006.33 16416.67 114940.00 1925.0000 381342.3 2669452 1410.3333
5 1.066667 25351.00 16225.00 110753.33 -152.3667 406208.3 2772717 8366.6667
x17 x18 x19 x20 x21 x22 x23 x24 x25
1 -1674.6667 -1521.033 1674.667 353442.7 2568286 298623.7 12185.000 168.33333 63.86667
2 -2851.3333 -2864.333 2851.333 363654.0 2640337 301270.0 -2288.667 59.33333 56.90000
3 -2305.3333 -2188.333 2305.333 384050.7 2674244 313343.0 7085.000 717.00000 67.33333
4 -2154.6667 -2130.000 2154.667 397758.3 2784392 320309.0 1180.967 167.93333 74.90000
5 -480.6667 -432.000 1313.333 422433.3 2883470 341558.0 7733.333 227.66667 72.60000
这也是dput
的输出
structure(list(label = c(0, 0, 0, 0, 0), x1 = c(34.9666666666667,
79, 16.1, 61.9, 31.4), x2 = c(41.9333333333333, 25.2, 15.8, 23.9666666666667,
18.4), x3 = c(54.3, 95.4333333333333, 17.1333333333333, 74.2333333333333,
42.1666666666667), x4 = c(42.9333333333333, 75.2333333333333,
27.2333333333333, 57.2333333333333, 41.1333333333333), x5 = c(24.4,
31.5, 35.1, 45.5, 55.8666666666667)), row.names = c(NA, 5L), class = "data.frame")
在此先感谢您的帮助。
这里是绘制数据集所有 ROC 曲线的完整代码 df
与问题中数据集的结构相同。我首先首先创建一个数据集,因为问题中的一个只有一个 class (label
始终为 0)。那么,
- 获取当前目录,创建临时目录保存图形文件;
- 在
for
循环中,计算预测及其性能;
- 使用
png()
打开图形设备;
- 绘制性能图,将其保存到磁盘并关闭设备。
现在有那么多了"Perf_X?.png" files as variables
"X?"in the data.frame. These
png`文件相关的说明可以删掉,不过有80个图,最好先保存下来,以后一一看。
library(ROCR)
# Make up a data set
set.seed(2022)
data(ROCR.simple)
df <- do.call(cbind.data.frame, ROCR.simple[2:1])
df <- cbind(df, replicate(5, runif(nrow(df))))
names(df) <- c("label", paste0("X", seq.int(ncol(df) - 1)))
old_dir <- getwd()
TempDir <- tempdir()
dir.exists(TempDir)
#> [1] TRUE
setwd(TempDir)
for (i in seq_len(ncol(df))[-1]){
pred <- prediction(df[[i]], df$label)
perf <- performance(pred, "tpr", "fpr")
# save to PNG file, names are "Perf_%s.png" with
# the format string %s becoming the column name
filename <- sprintf("Perf_%s.png", names(df)[i])
png(filename = filename)
plot_title <- paste("Variable:", names(df)[i])
plot(perf, main = plot_title, colorize = TRUE)
dev.off()
}
plots_vec <- list.files(path = TempDir, pattern = "Perf_.*\.png")
plots_vec
#> [1] "Perf_X1.png" "Perf_X2.png" "Perf_X3.png" "Perf_X4.png" "Perf_X5.png"
#> [6] "Perf_X6.png"
由 reprex package (v2.0.1)
于 2022-03-19 创建
最后清理
setwd(old_dir)
unlink(file.path(TempDir, plots_vec))
如有任何帮助,我们将不胜感激。
我正在尝试绘制 80 列的 ROC 曲线,代码如下:
pred <- prediction(df$x, label)
perf <- performance(pred,"tpr","fpr")
plot(perf,colorize=TRUE)
现在我想每次绘制列并将其放入
df$x
然后计算 pred,然后计算 perf,然后绘制它(我必须对 80 列进行计算)。
现在,这是我写的代码,我知道它不正确,但不知道如何让它工作
for (i in 1:ncol(df)){
pred <- prediction(df$x[i], label)
perf <- performance(pred,"tpr","fpr")
plot(perf,colorize=TRUE)}
这是我数据的前几行:
label x1 x2 x3 x4 x5 x6 x7 x8
1 0 34.96667 41.93333 54.30000 42.93333 24.40000 48.50000 42.73333 33.86667
2 0 79.00000 25.20000 95.43333 75.23333 31.50000 88.96667 83.60000 75.30000
3 0 16.10000 15.80000 17.13333 27.23333 35.10000 18.90000 14.66667 40.00000
4 0 61.90000 23.96667 74.23333 57.23333 45.50000 69.70000 61.80000 58.00000
5 0 31.40000 18.40000 42.16667 41.13333 55.86667 39.90000 32.33333 45.50000
x9 x10 x11 x12 x13 x14 x15 x16
1 11.366667 22983.00 15302.67 111186.67 781.3333 338140.0 2457099 13078.3333
2 20.200000 22750.33 16278.00 118196.67 156.6333 347375.7 2522140 405.6667
3 -10.100000 23812.33 13035.00 90846.67 -1758.3333 371015.7 2583397 11148.6667
4 17.000000 25006.33 16416.67 114940.00 1925.0000 381342.3 2669452 1410.3333
5 1.066667 25351.00 16225.00 110753.33 -152.3667 406208.3 2772717 8366.6667
x17 x18 x19 x20 x21 x22 x23 x24 x25
1 -1674.6667 -1521.033 1674.667 353442.7 2568286 298623.7 12185.000 168.33333 63.86667
2 -2851.3333 -2864.333 2851.333 363654.0 2640337 301270.0 -2288.667 59.33333 56.90000
3 -2305.3333 -2188.333 2305.333 384050.7 2674244 313343.0 7085.000 717.00000 67.33333
4 -2154.6667 -2130.000 2154.667 397758.3 2784392 320309.0 1180.967 167.93333 74.90000
5 -480.6667 -432.000 1313.333 422433.3 2883470 341558.0 7733.333 227.66667 72.60000
这也是dput
的输出structure(list(label = c(0, 0, 0, 0, 0), x1 = c(34.9666666666667,
79, 16.1, 61.9, 31.4), x2 = c(41.9333333333333, 25.2, 15.8, 23.9666666666667,
18.4), x3 = c(54.3, 95.4333333333333, 17.1333333333333, 74.2333333333333,
42.1666666666667), x4 = c(42.9333333333333, 75.2333333333333,
27.2333333333333, 57.2333333333333, 41.1333333333333), x5 = c(24.4,
31.5, 35.1, 45.5, 55.8666666666667)), row.names = c(NA, 5L), class = "data.frame")
在此先感谢您的帮助。
这里是绘制数据集所有 ROC 曲线的完整代码 df
与问题中数据集的结构相同。我首先首先创建一个数据集,因为问题中的一个只有一个 class (label
始终为 0)。那么,
- 获取当前目录,创建临时目录保存图形文件;
- 在
for
循环中,计算预测及其性能; - 使用
png()
打开图形设备; - 绘制性能图,将其保存到磁盘并关闭设备。
现在有那么多了"Perf_X?.png" files as variables
"X?"in the data.frame. These
png`文件相关的说明可以删掉,不过有80个图,最好先保存下来,以后一一看。
library(ROCR)
# Make up a data set
set.seed(2022)
data(ROCR.simple)
df <- do.call(cbind.data.frame, ROCR.simple[2:1])
df <- cbind(df, replicate(5, runif(nrow(df))))
names(df) <- c("label", paste0("X", seq.int(ncol(df) - 1)))
old_dir <- getwd()
TempDir <- tempdir()
dir.exists(TempDir)
#> [1] TRUE
setwd(TempDir)
for (i in seq_len(ncol(df))[-1]){
pred <- prediction(df[[i]], df$label)
perf <- performance(pred, "tpr", "fpr")
# save to PNG file, names are "Perf_%s.png" with
# the format string %s becoming the column name
filename <- sprintf("Perf_%s.png", names(df)[i])
png(filename = filename)
plot_title <- paste("Variable:", names(df)[i])
plot(perf, main = plot_title, colorize = TRUE)
dev.off()
}
plots_vec <- list.files(path = TempDir, pattern = "Perf_.*\.png")
plots_vec
#> [1] "Perf_X1.png" "Perf_X2.png" "Perf_X3.png" "Perf_X4.png" "Perf_X5.png"
#> [6] "Perf_X6.png"
由 reprex package (v2.0.1)
于 2022-03-19 创建最后清理
setwd(old_dir)
unlink(file.path(TempDir, plots_vec))