2016-10-11 1 views
0

Я стараюсь избегать запуска ~ 250 тестов Кларка и Эванса (clarkevans.test) вручную.Как создать несколько owin для теста clark и evans?

У меня есть таблица координат xmin, xmax, ymin, ymax в файле excel, где каждая строка является размером в рабочем окне.

После прочтения файла 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

Спасибо, что ответили на мой вопрос. Я добавил некоторые данные и код. Я не пробовал ни одного из циклов, потому что большинство из того, что я читал, избегало их использования. Я попробовал пример, который вы дали с «apply», но опять-таки я получил сообщение об ошибке: если один из xrange, yrange указан, то оба должны быть. – JZA

+0

Я получил способ применения! Большое вам спасибо за вашу помощь, я ценю это. – JZA

ответ

0

Я бы рекомендовал для цикла для этого, так как вы легко можете добавить шаги для генерировать 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 
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]) 
Смежные вопросы