ppp 对象的规则是什么?是否可以为 sapply 函数选择两个变量?
What are the rules for ppp objects? Is selecting two variables possible for an sapply function?
使用描述 spatstat 中泊松簇过程的代码。一次分解每一行代码来理解。容易上手。
library(spatstat)
lambda<-100
win<-owin(c(0,1),c(0,1))
n.seeds<-lambda*win$xrange[2]*win$yrange[2]
定义 window 后,我会使用随机生成函数生成我的点数
x=runif(min=win$xrange[1],max=win$xrange[2],n=pmax(1,n.seeds))
y=runif(min=win$yrange[1],max=win$yrange[2],n=pmax(1,n.seeds))
这可以直接绘制我知道使用 ppp 函数
seeds<-ppp(x=x,
y=y,
window=win)
plot(seeds)
我在 ppp 对象上添加标记的下一行,它显然是在描述点的旋转角度,我现在不明白这是如何工作的,但没关系,我稍后会弄清楚。
marks<-data.frame(angles=runif(n=pmax(1,n.seeds),min=0,max=2*pi))
seeds1<-ppp(x=x,
y=y,
window=win,
marks=marks)
我遇到的第一个问题是将描述 window 人口的名为 pops 的对象添加到 ppp 对象。我了解这些值是如何得出的,它是给定输入值 mu 的泊松分布,它可以是任何值并且观察总数等于 window.
中的点
seeds2<-ppp(x=x,
y=y,
window=win,
marks=marks,
pops=rpois(lambda=5,n=pmax(1,n.seeds)))
我的第一个问题是,如何在ppp对象中添加一个没有分类的变量?我查看了ppp文档,没有提到pops。
我的第二个问题是关于使用双变量,下一行需要一个 sapply 函数来定义维度。
dim1<-pmax(1,sapply(seeds1$marks$pops, FUN=function(x)rpois(n=1,sqrt(x))))
从未见过$函数被使用两次,seeds2$marks$pop returns $运算符对原子向量无效。你能解释一下这是怎么回事吗?
非常感谢。
这是几个问题 - 请一次问一个问题。
从您的 post 来看,您不清楚您是在尝试理解别人的代码,还是在自己开发代码。这对答案有影响。
澄清一下,此代码并非来自 spatstat
包内;它是某人使用 spatstat
包生成数据的代码。 spatstat
包中有代码可以生成泊松集群过程的模拟实现(我认为这是你想要做的),你可以查看 spatstat
代码 rPoissonCluster
看看如何正确有效地完成它。
您在此处显示的代码有很多错误。但我将从回答您标题中的两个问题开始。
- 创建
ppp
object 的规则在 ppp
的帮助文件中列出。帮助说明如果给出参数 window
,则忽略不匹配的参数 ...
。这意味着在行 seeds2<-ppp(x=x,y=y,window=win,marks=marks,pops=rpois(lambda=5,n=pmax(1,n.seeds)))
参数 pops
将被 忽略 .
- 习语
sapply(seeds1$marks$pops, FUN=f)
在 R 中是完全有效的语法。如果 object seeds1
是一个结构或列表,它有一个名为 marks
的组件,这反过来是一个结构或列表,它有一个名为 pops
的组件,那么习语 seeds1$marks$pops
将提取它。这与 sapply
. 没有特别关系
现在转向代码中的错误,
- 行
n.seeds<-lambda*win$xrange[2]*win$yrange[2]
大概是为了计算window中簇parents(簇种子)的预期数量。这仅在 window 是左下角位于原点 (0,0) 的矩形时有效。写成 n.seeds <- lambda * area(win)
. 会更安全
- 然而,变量
n.seeds
稍后被使用,因为它是簇parents(簇种子)的数量。作者忘记了种子的数量是随机的,服从泊松分布。所以,更正确的计算应该是 n.seeds <- rpois(1, lambda * area(win))
- 然而,这仍然是不正确的,因为 window 之外的集群 parents(种子点)也可以在 window 内生成后代点。所以,种子点实际上必须是在
win
扩展得到的更大的window中产生的。 spatstat
中用于生成集群 parents 的适当命令是 bigwin <- grow.rectangle(Frame(win), cluster_diameter) ; Parents <- rpoispp(lambda, bigwin)
- 作者apparently想给每个parent点分配两个标记值:一个随机
angle
和一个随机数pops
。正确的做法是使 marks
成为一个包含两列的数据框,例如 marks(seeds1) <- data.frame(angles=runif(n.seeds, max=2*pi), pops=rpois(n.seeds, 5))
使用描述 spatstat 中泊松簇过程的代码。一次分解每一行代码来理解。容易上手。
library(spatstat)
lambda<-100
win<-owin(c(0,1),c(0,1))
n.seeds<-lambda*win$xrange[2]*win$yrange[2]
定义 window 后,我会使用随机生成函数生成我的点数
x=runif(min=win$xrange[1],max=win$xrange[2],n=pmax(1,n.seeds))
y=runif(min=win$yrange[1],max=win$yrange[2],n=pmax(1,n.seeds))
这可以直接绘制我知道使用 ppp 函数
seeds<-ppp(x=x,
y=y,
window=win)
plot(seeds)
我在 ppp 对象上添加标记的下一行,它显然是在描述点的旋转角度,我现在不明白这是如何工作的,但没关系,我稍后会弄清楚。
marks<-data.frame(angles=runif(n=pmax(1,n.seeds),min=0,max=2*pi))
seeds1<-ppp(x=x,
y=y,
window=win,
marks=marks)
我遇到的第一个问题是将描述 window 人口的名为 pops 的对象添加到 ppp 对象。我了解这些值是如何得出的,它是给定输入值 mu 的泊松分布,它可以是任何值并且观察总数等于 window.
中的点seeds2<-ppp(x=x,
y=y,
window=win,
marks=marks,
pops=rpois(lambda=5,n=pmax(1,n.seeds)))
我的第一个问题是,如何在ppp对象中添加一个没有分类的变量?我查看了ppp文档,没有提到pops。
我的第二个问题是关于使用双变量,下一行需要一个 sapply 函数来定义维度。
dim1<-pmax(1,sapply(seeds1$marks$pops, FUN=function(x)rpois(n=1,sqrt(x))))
从未见过$函数被使用两次,seeds2$marks$pop returns $运算符对原子向量无效。你能解释一下这是怎么回事吗?
非常感谢。
这是几个问题 - 请一次问一个问题。
从您的 post 来看,您不清楚您是在尝试理解别人的代码,还是在自己开发代码。这对答案有影响。
澄清一下,此代码并非来自 spatstat
包内;它是某人使用 spatstat
包生成数据的代码。 spatstat
包中有代码可以生成泊松集群过程的模拟实现(我认为这是你想要做的),你可以查看 spatstat
代码 rPoissonCluster
看看如何正确有效地完成它。
您在此处显示的代码有很多错误。但我将从回答您标题中的两个问题开始。
- 创建
ppp
object 的规则在ppp
的帮助文件中列出。帮助说明如果给出参数window
,则忽略不匹配的参数...
。这意味着在行seeds2<-ppp(x=x,y=y,window=win,marks=marks,pops=rpois(lambda=5,n=pmax(1,n.seeds)))
参数pops
将被 忽略 . - 习语
sapply(seeds1$marks$pops, FUN=f)
在 R 中是完全有效的语法。如果 objectseeds1
是一个结构或列表,它有一个名为marks
的组件,这反过来是一个结构或列表,它有一个名为pops
的组件,那么习语seeds1$marks$pops
将提取它。这与sapply
. 没有特别关系
现在转向代码中的错误,
- 行
n.seeds<-lambda*win$xrange[2]*win$yrange[2]
大概是为了计算window中簇parents(簇种子)的预期数量。这仅在 window 是左下角位于原点 (0,0) 的矩形时有效。写成n.seeds <- lambda * area(win)
. 会更安全
- 然而,变量
n.seeds
稍后被使用,因为它是簇parents(簇种子)的数量。作者忘记了种子的数量是随机的,服从泊松分布。所以,更正确的计算应该是n.seeds <- rpois(1, lambda * area(win))
- 然而,这仍然是不正确的,因为 window 之外的集群 parents(种子点)也可以在 window 内生成后代点。所以,种子点实际上必须是在
win
扩展得到的更大的window中产生的。spatstat
中用于生成集群 parents 的适当命令是bigwin <- grow.rectangle(Frame(win), cluster_diameter) ; Parents <- rpoispp(lambda, bigwin)
- 作者apparently想给每个parent点分配两个标记值:一个随机
angle
和一个随机数pops
。正确的做法是使marks
成为一个包含两列的数据框,例如marks(seeds1) <- data.frame(angles=runif(n.seeds, max=2*pi), pops=rpois(n.seeds, 5))