我在 R 中撰寫了這個回圈,它生成一個隨機資料集,然后為這個隨機資料集繪制一個圖:
library(ggplot2)
results = list()
for (i in 1:100)
{
my_data_i = data.frame(var_1 = rnorm(100,10,10), var_2 = rnorm(100,10,10))
plot_i = ggplot(my_data_i, aes(x=var_1, y=var_2)) geom_point() ggtitle(paste0("graph", i))
results[[i]] = plot_i
}
有人可以告訴我如何從這個串列中提取每個單獨的圖并在全域環境中創建一個檔案:plot_1,plot_2...plot_100?
謝謝!
uj5u.com熱心網友回復:
正如我們在評論中提到的,最好不要在全域環境中創建 100 個物件,而是將其存盤在list. 這可以通過for回圈來完成(如 OP 的代碼所示,但創建所需長度的 NULL 串列并進行分配)
results <- vector('list', 100)
for (i in seq_along(results)
{
my_data_i <- data.frame(var_1 = rnorm(100,10,10), var_2 = rnorm(100,10,10))
plot_i <- ggplot(my_data_i, aes(x=var_1, y=var_2))
geom_point()
ggtitle(paste0("graph", i))
results[[i]] = plot_i
}
names(results) <- paste0('plot_', seq_along(results))
然后使用$或提取[[
results[['plot_1']]
results$plot_1
沒有預先分配的另一種選擇是使用lapply
results2 <- lapply(1:100, function(i) {
my_data_i <- data.frame(var_1 = rnorm(100,10,10), var_2 = rnorm(100,10,10))
ggplot(my_data_i, aes(x=var_1, y=var_2))
geom_point()
ggtitle(paste0("graph", i))
})
names(results2) <- paste0("plot_", seq_along(results2))
uj5u.com熱心網友回復:
我想我剛剛想通了?
list2env(setNames(results,paste0("plot",seq(results))),envir = .GlobalEnv)
這個對嗎?
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/515264.html
標籤:r循环
