我试图避免手动运行~250 Clark和Evans测试(clarkevans.test)。
我在excel文件中有一个xmin,xmax,ymin,ymax坐标表,其中每一行都是操作窗口的尺寸。
将excel文件(read.csv)读入R后,似乎无法通过任何形式的“apply”和“owin”来为每行输出一个owin。最终我需要以类似的方式创建ppp并运行clarkevans.test,但是现在我只是需要帮助才能完成第一步。
coordin<-read.csv("Coordin.csv")
cdf<-data.frame(coordin)
> cdf
xmin xmax ymin ymax
1 456741 456841 3913505 3913605
2 453341 453441 3915805 3915905
3 453441 453541 3915805 3915905
4 452441 452541 3915705 3915805
5 453741 453841 3915705 3915805
我尝试了几种变体,但我无法解决任何问题。
lapply(cdf, function(x) owin(xmin, xmax, ymin, ymax))
答案 0 :(得分:0)
我建议使用for循环,因为您可以轻松添加步骤
到达目的地时生成ppp
个对象:
library(spatstat)
# Test data:
dat <- data.frame(xmin = 1:3, xmax = 2:4, ymin = 1:3, ymax = 2:4)
# List of owin initialised as unit squares:
win_list <- replicate(nrow(dat), owin(), simplify = FALSE)
# For loop to make each owin:
for(i in seq_len(nrow(dat))){
# Vector of owin values:
v <- as.numeric(dat[i, ])
# Finally create the owin object
win_list[[i]] <- owin( v[1:2], v[3:4])
}
然后owin
对象列表包含您期望的内容:
win_list
#> [[1]]
#> window: rectangle = [1, 2] x [1, 2] units
#>
#> [[2]]
#> window: rectangle = [2, 3] x [2, 3] units
#>
#> [[3]]
#> window: rectangle = [3, 4] x [3, 4] units
如果您坚持使用申请:
apply(dat, 1, function(x) owin(c(x[1], x[2]), c(x[3], x[4])))
#> [[1]]
#> window: rectangle = [1, 2] x [1, 2] units
#>
#> [[2]]
#> window: rectangle = [2, 3] x [2, 3] units
#>
#> [[3]]
#> window: rectangle = [3, 4] x [3, 4] units
答案 1 :(得分:0)
原始代码无效,因为owin(xmin,xmax,ymin,ymax)
无效语法用于调用owin
。
一种有效的语法是owin(c(xmin,xmax), c(ymin,ymax))
。
以下内容适用于列为df
的数据框xmin,xmax,ymin,ymax
:
apply(df, 1, function(z) owin(z[1:2], z[3:4])