[英]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 的答案,但有點不同。
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.