簡體   English   中英

將 for 循環的輸出添加到 data.frame 中,以便我可以使用 r 中的 ggplot2 繪制它們

[英]Adding outputs from a for loop into a data.frame so i can graph them with ggplot2 in r

我想在一致的時間段后計算獵物捕食者系統的人口數量,為此我已經根據以下公式創建了我的代碼:公式

r中的代碼:

matrixA <- matrix(c(0.4,-0.5,0.3,1.2),nrow = 2) #population change matrix
basepop <- matrix(c(10,30),nrow = 2)            #base population

plot(basepop[1,1],basepop[2,1])
for(k in 1:50){
population <- matrixA %*% basepop  #population[1,2] - predator
basepop <- population              #population[2,1] - prey
  print(population)

}

現在我只想將這個循環的結果添加到一個數據框中,其中 x 坐標告訴捕食者的數量,y 坐標告訴獵物的數量。

您可以將人口矩陣的每次迭代添加到數據框中進行繪圖:

matrixA <- matrix(c(0.4,-0.5,0.3,1.2),nrow = 2) #population change matrix
basepop <- matrix(c(10,30),nrow = 2)            #base population

plot(basepop[1,1],basepop[2,1])
continued.df <- data.frame("predator" = rep(NA, times = 50), "prey" = rep(NA, times = 50))
for(k in 1:50){
  population <- matrixA %*% basepop  #population[1,2] - predator
  basepop <- population       #population[2,1] - prey
  print(population)
  continued.df$prey[k] <- population[2]
  continued.df$predator[k] <- population[1]
}
plot(continued.df)

然后繪制continued.df將為您提供x上的捕食者和y上的獵物(假設我理解正確:獵物數量從 30 開始,捕食者從 10 開始。

類似於@JustinCocco 的答案,但有點不同。

  1. 我使人口成為一個矩陣,其列數等於模擬周期數
  2. 完成模擬后,我將轉換為數據框。
matrixA <- matrix(c(0.4,-0.5,0.3,1.2),nrow = 2) #population change matrix
basepop <- matrix(c(10,30),nrow = 2)            #base population

# Init matrix
population <- matrix(NA, nrow = 2, ncol = 50)
population[,1] <- basepop
for(k in 2:50) {
  population[,k] <- matrixA %*% population[,k-1]
}

# Make dataframe
population_df <- data.frame(k = seq(ncol(population)), predator = population[1,], prey = population[2,])

# Plot
library(ggplot2)
ggplot(population_df, aes(predator, prey, color = k)) +
  geom_point()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM