我正在尝试使用deSolve. 使用以下代码,我希望参数gamma0在时间步长 0、1、2、3、4、5、6、7、8、9 和 10 处取值为 5,否则为 0。但是,print(gamma0)显示gamma0保持在 0。
这是我的 ODE:
library(deSolve)
param <- c(a = 0.1, b = 1)
yini <- c(alpha0 = 6, beta0 = 2)
mod <- function(times, yini, param) {
with(as.list(c(yini, param)), {
gamma0 <- ifelse(times %in% seq(0,10,1), 5, 0)
## print(gamma0)
dalpha0 <- - a*alpha0 + gamma0
dbeta0 <- a*alpha0 - b*beta0
return(list(c(dalpha0, dbeta0)))
})}
times <- seq(from = 0, to = 10, by = 1/24)
out …Run Code Online (Sandbox Code Playgroud) 继续如何在大空间范围内加速最低成本路径模型之后,我尝试在Netlogo中编写A*算法来增加在大空间范围内的最低成本路径模型.这是我的代码:
to findPath [ID-start-node ID-end-node]
let currentNodesInList [ ]
let current-node node ID-start-node
let end-node node ID-end-node
ask current-node [ set color red]
ask end-node [ set color red]
set currentNodesInList lput current-node currentNodesInList
while [not member? end-node currentNodesInList] [
ask current-node [
foreach sort nodes-on neighbors [
ask ? [set f-value [link-cost] of link ([who] of current-node) ([who] of ?) + distance end-node] ]
let next-current-node min-one-of [nodes-on neighbors] of current-node [f-value]
ask link ([who] of current-node) …Run Code Online (Sandbox Code Playgroud) 从http://ccl.northwestern.edu/netlogo/models/community/Astardemo,我通过使用网络中的节点来定义最低成本路径来编码A*算法.代码似乎有效,但是当我在大空间尺度上使用它时它太慢了.我的景观有1000个补丁x 1000个补丁,1个补丁= 1个像素.即使我减少400补丁x 400补丁1补丁= 1像素,它仍然太慢(我不能修改我的景观低于400补丁x 400补丁).这是代码:
to find-path [ source-node destination-node]
let search-done? false
let search-path []
let current-node 0
set list-open []
set list-closed []
let list-links-with-nodes-in-list-closed []
let list-links []
set list-open lput source-node list-open
while [ search-done? != true]
[
ifelse length list-open != 0
[
set list-open sort-by [[f] of ?1 < [f] of ?2] list-open
set current-node item 0 list-open
set list-open remove-item 0 list-open
set list-closed lput current-node list-closed
ask current-node
[ …Run Code Online (Sandbox Code Playgroud) 有没有办法计算空间线周围缓冲区内的道路密度(km /km²)?道路由光栅中的像素(1像素= 625平方米)表示.所以我开始使用该函数将道路像素转换为折线rasterToContour (package raster).然后,我正在考虑计算缓冲区内的行总长度(以km为单位)和缓冲区(以km²为单位).
r <- raster(rast_path)
x <- rasterToContour(r)
Run Code Online (Sandbox Code Playgroud)
这是一个可重复的例子:
## To create raster:
library(raster)
library(rgeos)
r <- raster(ncols=90, nrows=50)
values(r) <- sample(1:10, ncell(r), replace=TRUE)
## Road raster
r[r[] < 10] <- 0
r[r[] >= 10] <- 1
plot(r)
## To create spatial lines
line1 <- rbind(c(-125,0), c(0,60))
line2 <- rbind(c(0,60), c(40,5))
line3 <- rbind(c(40,5), c(15,-45))
line1_sp <- spLines(line1)
line2_sp <- spLines(line2)
line3_sp <- spLines(line3)
## To create buffer around lines
line2_buff <- gBuffer(line2_sp, width=20)
plot(line2_sp,add=T) …Run Code Online (Sandbox Code Playgroud) 我正在尝试找到一种快速方法来提取数据框列表中的元素。
为此,我测试了该功能lapply。这是一个可重现的示例:
i <- 2
dat <- replicate(100000, data.frame(x=1:5000, y = 1:5000, z = 1:5000), simplify=FALSE)
system.time(test <- lapply(dat, function(y) y[i, c("x", "y")]))
user system elapsed
7.69 0.00 7.73
Run Code Online (Sandbox Code Playgroud)
理想情况下,经过的时间应该 <= 1 秒。
我想基于一组相同的行在数据框中添加一个计数器列.为此,我使用了包data.table.在我的例子中,行之间的比较需要从列"z"AND("x"OR"y")的组合中进行.
我测试过:
DF[ , Index := .GRP, by = c("x","y","z") ]
Run Code Online (Sandbox Code Playgroud)
但结果是"z"和"x"与"y"的组合.
如何组合"z"AND("x"或"y")?
这是一个数据示例:
DF = data.frame(x=c("a","a","a","b","c","d","e","f","f"), y=c(1,3,2,8,8,4,4,6,0), z=c("M","M","M","F","F","M","M","F","F"))
DF <- data.table(DF)
Run Code Online (Sandbox Code Playgroud)
我想有这个输出:
> DF
x y z Index
1: a 1 M 1
2: a 3 M 1
3: a 2 M 1
4: b 8 F 2
5: c 8 F 2
6: d 4 M 3
7: e 4 M 3
8: f 6 F 4
9: f 0 F 4
Run Code Online (Sandbox Code Playgroud) 我想绘制一条洛伦兹曲线并计算基尼指数,目的是确定前 20% 受感染最多的主机支持多少寄生虫。
这是我的数据集:
每个主机的寄生虫数量:
parasites = c(0,1,2,3,4,5,6,7,8,9,10)
Run Code Online (Sandbox Code Playgroud)
与上面给出的每种寄生虫数量相关的宿主数量:
hosts = c(18,20,28,19,16,10,3,1,0,0,0)
Run Code Online (Sandbox Code Playgroud)
表示洛伦兹曲线:
我手动计算了寄生虫和宿主的累积百分比:
cumul_parasites <- cumsum(parasites)/max(cumsum(parasites))
cumul_hosts <- cumsum(hosts)/max(cumsum(hosts))
plot(cumul_hosts, cumul_parasites, type= "l")
Run Code Online (Sandbox Code Playgroud)
我还测试了功能Lc(包ineq):
Lc.p <- Lc(parasites,n=hosts)
plot(Lc.p)
Run Code Online (Sandbox Code Playgroud)
为什么两条曲线(手动和功能Lc)不同?
r ×5
a-star ×2
netlogo ×2
algorithm ×1
data.table ×1
ode ×1
parameters ×1
performance ×1
r-raster ×1