Есть ли способ создать список объектов ppp с помощью spatstat в R?

#r #function #tidyr #spatstat

Вопрос:

Я пытаюсь создать список ландшафтных объектов, которые были сгруппированы в соответствии с переменной, называемой sim. В идеале мне нужен список с ландшафтными объектами, который можно назвать т. е.

 
[[1]]

Planar point pattern: 100 points
window: rectangle = [0, 1000] x [0, 1000] units

[[2]]

Planar point pattern: 100 points
window: rectangle = [0, 1000] x [0, 1000] units

 

Код, который я пробовал до сих пор, таков:

 
library(tidyr)
library(spatstat)

set.seed(23)

x<-runif(1000)*1000
y<-runif(1000)*1000
sim<-rep(1:10,100)

coordinates<-data.frame(x,y,sim)

coordinates<-coordinates[order(sim),]

emptylist<-vector(mode="list",length=10)
metriccalculation<-function(x,y){
  emptylist<-ppp(x,y,owin(xrange=c(0,1000),yrange=c(0,1000)))
}

coordinates%>%group_by(sim)%>%lapply(coordinates,function(x)metriccalculation(coordinates$x,coordinates$y))

 

Это возвращает ошибку:

 Error in get(as.character(FUN), mode = "function", envir = envir) : 
  object 'coordinates' of mode 'function' was not found
 

ПРАВКА 1: Я попытался добавить пустой список в качестве переменной в функцию metriccalculation, вернув ту же ошибку.

 metriccalculation<-function(x,y,r){
  r<-ppp(x,y,owin(xrange=c(0,1000),yrange=c(0,1000)))
}

coordinates%>%group_by(sim)%>%lapply(coordinates,function(x)metriccalculation(coordinates$x,coordinates$y,emptylist))
 

ПРАВКА 2: Я попытался добавить дополнение к функции, чтобы список был заполнен. Это также привело к той же ошибке.

 emptylist<-vector(mode="list",length=10)
metriccalculation<-function(x,y,r){
  r<-append(r,(ppp(x,y,owin(xrange=c(0,1000),yrange=c(0,1000)))))
}

coordinates%>%group_by(sim)%>%lapply(coordinates,function(x)metriccalculation(coordinates$x,coordinates$y,emptylist))
 

ПРАВКА 3:

Хорошо, я проверил в Интернете, и есть возможный способ передачи нескольких переменных через функцию apply. Это приводит к:

 coordinates%>%group_by(sim)%>%apply(coordinates,metriccalculation,x=coordinates$x,y=coordinates$y,r=emptylist)

 

И новая ошибка,

 Error in d[-MARGIN] : invalid subscript type 'list'
 

Комментарии:

1. Что вы подразумеваете под списком, сгруппированным по переменной sim? Что такое сгруппированный список? Вы можете создать вложенный список, если хотите, такой, чтобы в нем было 10 записей (соответствующих сим 1 — 10), а затем у каждой из этих записей был список шаблонов точек. Это то, чего ты хочешь? То, что у вас сейчас есть, кажется очень запутанным. Это не coordinates кадр data.frame (конец списка) длиной 3, и ваш вызов lapply затем повторяется по этим 3 столбцам (x, y, sim), что, скорее всего, не то, что вы хотите. Четко объясните, чего вы хотите в качестве конечного результата, и мы, возможно, сможем вам помочь.

2. «Вы можете создать вложенный список, если хотите, такой, чтобы в нем было 10 записей (соответствующих сим 1 — 10), а затем у каждой из этих записей был список шаблонов точек. Это то, чего ты хочешь?» Да, именно этого я и хочу. «Не то, чтобы координаты были кадром data.frame (конечным, следовательно, списком) длиной 3, и ваш вызов lapply затем повторяется по этим 3 столбцам (x, y, sim), что, скорее всего, не то, что вы хотите. «Я не понимаю, как это не data.frame, потому что я создал его со строкой ` координаты<-data.frame(x,y,sim) координаты Но я вижу, что это не то, чего я хочу.

3. A data.frame -это просто специальное list приложение, в котором все элементы имеют одинаковую длину. То coordinates же самое относится и к а, и data.frame к а list . В приведенном ниже ответе я не составляю вложенный список, а просто простой список, в котором каждый элемент представляет собой одноточечный шаблон. Я думаю, что это то, что вы хотите, но если у вас есть более одного шаблона точек для каждого значения sim — карты, это, вероятно, не так.

Ответ №1:

Если вам действительно просто нужен список из 10 точечных шаблонов со 100 однородными случайными точками, вы можете сделать:

 library(spatstat)
rslt <- runifpoint(100, win = square(1000), nsim = 10)
rslt # Is a list with extra spatstat class `solist` (spatial object list)
#> List of point patterns
#> 
#> Simulation 1:
#> Planar point pattern: 100 points
#> window: rectangle = [0, 1000] x [0, 1000] units
#> 
#> Simulation 2:
#> Planar point pattern: 100 points
#> window: rectangle = [0, 1000] x [0, 1000] units
#> 
#> Simulation 3:
#> Planar point pattern: 100 points
#> window: rectangle = [0, 1000] x [0, 1000] units
#> 
#> Simulation 4:
#> Planar point pattern: 100 points
#> window: rectangle = [0, 1000] x [0, 1000] units
#> 
#> Simulation 5:
#> Planar point pattern: 100 points
#> window: rectangle = [0, 1000] x [0, 1000] units
#> 
#> Simulation 6:
#> Planar point pattern: 100 points
#> window: rectangle = [0, 1000] x [0, 1000] units
#> 
#> Simulation 7:
#> Planar point pattern: 100 points
#> window: rectangle = [0, 1000] x [0, 1000] units
#> 
#> Simulation 8:
#> Planar point pattern: 100 points
#> window: rectangle = [0, 1000] x [0, 1000] units
#> 
#> Simulation 9:
#> Planar point pattern: 100 points
#> window: rectangle = [0, 1000] x [0, 1000] units
#> 
#> Simulation 10:
#> Planar point pattern: 100 points
#> window: rectangle = [0, 1000] x [0, 1000] units
plot(rslt)
 

Если вы хотите разделить свой data.frame с координатами на 10 различных
шаблонов точек, которые вы можете сделать (повторно используя свой код):

 set.seed(23)
x<-runif(1000)*1000
y<-runif(1000)*1000
sim<-rep(1:10,100)
coordinates<-data.frame(x,y,sim)
coord_list <- split(coordinates[,c("x", "y")], coordinates$sim)
rslt2 <- lapply(coord_list, as.ppp, W = square(1000))
rslt2 # Is a usual list
#> 
 #r #function #tidyr #spatstat



Вопрос:

Я пытаюсь создать список ландшафтных объектов, которые были сгруппированы в соответствии с переменной, называемой sim. В идеале мне нужен список с ландшафтными объектами, который можно назвать т. е.
 
[[1]]

Planar point pattern: 100 points
window: rectangle = [0, 1000] x [0, 1000] units

[[2]]

Planar point pattern: 100 points
window: rectangle = [0, 1000] x [0, 1000] units

 

Код, который я пробовал до сих пор, таков:

 
library(tidyr)
library(spatstat)

set.seed(23)

x<-runif(1000)*1000
y<-runif(1000)*1000
sim<-rep(1:10,100)

coordinates<-data.frame(x,y,sim)

coordinates<-coordinates[order(sim),]

emptylist<-vector(mode="list",length=10)
metriccalculation<-function(x,y){
  emptylist<-ppp(x,y,owin(xrange=c(0,1000),yrange=c(0,1000)))
}

coordinates%>%group_by(sim)%>%lapply(coordinates,function(x)metriccalculation(coordinates$x,coordinates$y))

 

Это возвращает ошибку:

 Error in get(as.character(FUN), mode = "function", envir = envir) : 
  object 'coordinates' of mode 'function' was not found
 

ПРАВКА 1: Я попытался добавить пустой список в качестве переменной в функцию metriccalculation, вернув ту же ошибку.

 metriccalculation<-function(x,y,r){
  r<-ppp(x,y,owin(xrange=c(0,1000),yrange=c(0,1000)))
}

coordinates%>%group_by(sim)%>%lapply(coordinates,function(x)metriccalculation(coordinates$x,coordinates$y,emptylist))
 

ПРАВКА 2: Я попытался добавить дополнение к функции, чтобы список был заполнен. Это также привело к той же ошибке.

 emptylist<-vector(mode="list",length=10)
metriccalculation<-function(x,y,r){
  r<-append(r,(ppp(x,y,owin(xrange=c(0,1000),yrange=c(0,1000)))))
}

coordinates%>%group_by(sim)%>%lapply(coordinates,function(x)metriccalculation(coordinates$x,coordinates$y,emptylist))
 

ПРАВКА 3:

Хорошо, я проверил в Интернете, и есть возможный способ передачи нескольких переменных через функцию apply. Это приводит к:

 coordinates%>%group_by(sim)%>%apply(coordinates,metriccalculation,x=coordinates$x,y=coordinates$y,r=emptylist)

 

И новая ошибка,

 Error in d[-MARGIN] : invalid subscript type 'list'
 

Комментарии:

1. Что вы подразумеваете под списком, сгруппированным по переменной sim? Что такое сгруппированный список? Вы можете создать вложенный список, если хотите, такой, чтобы в нем было 10 записей (соответствующих сим 1 - 10), а затем у каждой из этих записей был список шаблонов точек. Это то, чего ты хочешь? То, что у вас сейчас есть, кажется очень запутанным. Это не coordinates кадр data.frame (конец списка) длиной 3, и ваш вызов lapply затем повторяется по этим 3 столбцам (x, y, sim), что, скорее всего, не то, что вы хотите. Четко объясните, чего вы хотите в качестве конечного результата, и мы, возможно, сможем вам помочь.

2. "Вы можете создать вложенный список, если хотите, такой, чтобы в нем было 10 записей (соответствующих сим 1 - 10), а затем у каждой из этих записей был список шаблонов точек. Это то, чего ты хочешь?" Да, именно этого я и хочу. "Не то, чтобы координаты были кадром data.frame (конечным, следовательно, списком) длиной 3, и ваш вызов lapply затем повторяется по этим 3 столбцам (x, y, sim), что, скорее всего, не то, что вы хотите. "Я не понимаю, как это не data.frame, потому что я создал его со строкой ` координаты<-data.frame(x,y,sim) координаты Но я вижу, что это не то, чего я хочу.

3. A data.frame -это просто специальное list приложение, в котором все элементы имеют одинаковую длину. То coordinates же самое относится и к а, и data.frame к а list . В приведенном ниже ответе я не составляю вложенный список, а просто простой список, в котором каждый элемент представляет собой одноточечный шаблон. Я думаю, что это то, что вы хотите, но если у вас есть более одного шаблона точек для каждого значения sim - карты, это, вероятно, не так.

Ответ №1:

Если вам действительно просто нужен список из 10 точечных шаблонов со 100 однородными случайными точками, вы можете сделать:

 library(spatstat)
rslt <- runifpoint(100, win = square(1000), nsim = 10)
rslt # Is a list with extra spatstat class `solist` (spatial object list)
#> List of point patterns
#> 
#> Simulation 1:
#> Planar point pattern: 100 points
#> window: rectangle = [0, 1000] x [0, 1000] units
#> 
#> Simulation 2:
#> Planar point pattern: 100 points
#> window: rectangle = [0, 1000] x [0, 1000] units
#> 
#> Simulation 3:
#> Planar point pattern: 100 points
#> window: rectangle = [0, 1000] x [0, 1000] units
#> 
#> Simulation 4:
#> Planar point pattern: 100 points
#> window: rectangle = [0, 1000] x [0, 1000] units
#> 
#> Simulation 5:
#> Planar point pattern: 100 points
#> window: rectangle = [0, 1000] x [0, 1000] units
#> 
#> Simulation 6:
#> Planar point pattern: 100 points
#> window: rectangle = [0, 1000] x [0, 1000] units
#> 
#> Simulation 7:
#> Planar point pattern: 100 points
#> window: rectangle = [0, 1000] x [0, 1000] units
#> 
#> Simulation 8:
#> Planar point pattern: 100 points
#> window: rectangle = [0, 1000] x [0, 1000] units
#> 
#> Simulation 9:
#> Planar point pattern: 100 points
#> window: rectangle = [0, 1000] x [0, 1000] units
#> 
#> Simulation 10:
#> Planar point pattern: 100 points
#> window: rectangle = [0, 1000] x [0, 1000] units
plot(rslt)
 

Если вы хотите разделить свой data.frame с координатами на 10 различных
шаблонов точек, которые вы можете сделать (повторно используя свой код):

1`
#> Planar point pattern: 100 points
#> window: rectangle = [0, 1000] x [0, 1000] units
#>
#>

#r #function #tidyr #spatstat

Вопрос:

Я пытаюсь создать список ландшафтных объектов, которые были сгруппированы в соответствии с переменной, называемой sim. В идеале мне нужен список с ландшафтными объектами, который можно назвать т. е.

 
[[1]]

Planar point pattern: 100 points
window: rectangle = [0, 1000] x [0, 1000] units

[[2]]

Planar point pattern: 100 points
window: rectangle = [0, 1000] x [0, 1000] units

 

Код, который я пробовал до сих пор, таков:

 
library(tidyr)
library(spatstat)

set.seed(23)

x<-runif(1000)*1000
y<-runif(1000)*1000
sim<-rep(1:10,100)

coordinates<-data.frame(x,y,sim)

coordinates<-coordinates[order(sim),]

emptylist<-vector(mode="list",length=10)
metriccalculation<-function(x,y){
  emptylist<-ppp(x,y,owin(xrange=c(0,1000),yrange=c(0,1000)))
}

coordinates%>%group_by(sim)%>%lapply(coordinates,function(x)metriccalculation(coordinates$x,coordinates$y))

 

Это возвращает ошибку:

 Error in get(as.character(FUN), mode = "function", envir = envir) : 
  object 'coordinates' of mode 'function' was not found
 

ПРАВКА 1: Я попытался добавить пустой список в качестве переменной в функцию metriccalculation, вернув ту же ошибку.

 metriccalculation<-function(x,y,r){
  r<-ppp(x,y,owin(xrange=c(0,1000),yrange=c(0,1000)))
}

coordinates%>%group_by(sim)%>%lapply(coordinates,function(x)metriccalculation(coordinates$x,coordinates$y,emptylist))
 

ПРАВКА 2: Я попытался добавить дополнение к функции, чтобы список был заполнен. Это также привело к той же ошибке.

 emptylist<-vector(mode="list",length=10)
metriccalculation<-function(x,y,r){
  r<-append(r,(ppp(x,y,owin(xrange=c(0,1000),yrange=c(0,1000)))))
}

coordinates%>%group_by(sim)%>%lapply(coordinates,function(x)metriccalculation(coordinates$x,coordinates$y,emptylist))
 

ПРАВКА 3:

Хорошо, я проверил в Интернете, и есть возможный способ передачи нескольких переменных через функцию apply. Это приводит к:

 coordinates%>%group_by(sim)%>%apply(coordinates,metriccalculation,x=coordinates$x,y=coordinates$y,r=emptylist)

 

И новая ошибка,

 Error in d[-MARGIN] : invalid subscript type 'list'
 

Комментарии:

1. Что вы подразумеваете под списком, сгруппированным по переменной sim? Что такое сгруппированный список? Вы можете создать вложенный список, если хотите, такой, чтобы в нем было 10 записей (соответствующих сим 1 - 10), а затем у каждой из этих записей был список шаблонов точек. Это то, чего ты хочешь? То, что у вас сейчас есть, кажется очень запутанным. Это не coordinates кадр data.frame (конец списка) длиной 3, и ваш вызов lapply затем повторяется по этим 3 столбцам (x, y, sim), что, скорее всего, не то, что вы хотите. Четко объясните, чего вы хотите в качестве конечного результата, и мы, возможно, сможем вам помочь.

2. "Вы можете создать вложенный список, если хотите, такой, чтобы в нем было 10 записей (соответствующих сим 1 - 10), а затем у каждой из этих записей был список шаблонов точек. Это то, чего ты хочешь?" Да, именно этого я и хочу. "Не то, чтобы координаты были кадром data.frame (конечным, следовательно, списком) длиной 3, и ваш вызов lapply затем повторяется по этим 3 столбцам (x, y, sim), что, скорее всего, не то, что вы хотите. "Я не понимаю, как это не data.frame, потому что я создал его со строкой ` координаты<-data.frame(x,y,sim) координаты Но я вижу, что это не то, чего я хочу.

3. A data.frame -это просто специальное list приложение, в котором все элементы имеют одинаковую длину. То coordinates же самое относится и к а, и data.frame к а list . В приведенном ниже ответе я не составляю вложенный список, а просто простой список, в котором каждый элемент представляет собой одноточечный шаблон. Я думаю, что это то, что вы хотите, но если у вас есть более одного шаблона точек для каждого значения sim - карты, это, вероятно, не так.

Ответ №1:

Если вам действительно просто нужен список из 10 точечных шаблонов со 100 однородными случайными точками, вы можете сделать:

 library(spatstat)
rslt <- runifpoint(100, win = square(1000), nsim = 10)
rslt # Is a list with extra spatstat class `solist` (spatial object list)
#> List of point patterns
#> 
#> Simulation 1:
#> Planar point pattern: 100 points
#> window: rectangle = [0, 1000] x [0, 1000] units
#> 
#> Simulation 2:
#> Planar point pattern: 100 points
#> window: rectangle = [0, 1000] x [0, 1000] units
#> 
#> Simulation 3:
#> Planar point pattern: 100 points
#> window: rectangle = [0, 1000] x [0, 1000] units
#> 
#> Simulation 4:
#> Planar point pattern: 100 points
#> window: rectangle = [0, 1000] x [0, 1000] units
#> 
#> Simulation 5:
#> Planar point pattern: 100 points
#> window: rectangle = [0, 1000] x [0, 1000] units
#> 
#> Simulation 6:
#> Planar point pattern: 100 points
#> window: rectangle = [0, 1000] x [0, 1000] units
#> 
#> Simulation 7:
#> Planar point pattern: 100 points
#> window: rectangle = [0, 1000] x [0, 1000] units
#> 
#> Simulation 8:
#> Planar point pattern: 100 points
#> window: rectangle = [0, 1000] x [0, 1000] units
#> 
#> Simulation 9:
#> Planar point pattern: 100 points
#> window: rectangle = [0, 1000] x [0, 1000] units
#> 
#> Simulation 10:
#> Planar point pattern: 100 points
#> window: rectangle = [0, 1000] x [0, 1000] units
plot(rslt)
 

Если вы хотите разделить свой data.frame с координатами на 10 различных
шаблонов точек, которые вы можете сделать (повторно используя свой код):

2`
#> Planar point pattern: 100 points
#> window: rectangle = [0, 1000] x [0, 1000] units
#>
#>

#r #function #tidyr #spatstat

Вопрос:

Я пытаюсь создать список ландшафтных объектов, которые были сгруппированы в соответствии с переменной, называемой sim. В идеале мне нужен список с ландшафтными объектами, который можно назвать т. е.

 
[[1]]

Planar point pattern: 100 points
window: rectangle = [0, 1000] x [0, 1000] units

[[2]]

Planar point pattern: 100 points
window: rectangle = [0, 1000] x [0, 1000] units

 

Код, который я пробовал до сих пор, таков:

 
library(tidyr)
library(spatstat)

set.seed(23)

x<-runif(1000)*1000
y<-runif(1000)*1000
sim<-rep(1:10,100)

coordinates<-data.frame(x,y,sim)

coordinates<-coordinates[order(sim),]

emptylist<-vector(mode="list",length=10)
metriccalculation<-function(x,y){
  emptylist<-ppp(x,y,owin(xrange=c(0,1000),yrange=c(0,1000)))
}

coordinates%>%group_by(sim)%>%lapply(coordinates,function(x)metriccalculation(coordinates$x,coordinates$y))

 

Это возвращает ошибку:

 Error in get(as.character(FUN), mode = "function", envir = envir) : 
  object 'coordinates' of mode 'function' was not found
 

ПРАВКА 1: Я попытался добавить пустой список в качестве переменной в функцию metriccalculation, вернув ту же ошибку.

 metriccalculation<-function(x,y,r){
  r<-ppp(x,y,owin(xrange=c(0,1000),yrange=c(0,1000)))
}

coordinates%>%group_by(sim)%>%lapply(coordinates,function(x)metriccalculation(coordinates$x,coordinates$y,emptylist))
 

ПРАВКА 2: Я попытался добавить дополнение к функции, чтобы список был заполнен. Это также привело к той же ошибке.

 emptylist<-vector(mode="list",length=10)
metriccalculation<-function(x,y,r){
  r<-append(r,(ppp(x,y,owin(xrange=c(0,1000),yrange=c(0,1000)))))
}

coordinates%>%group_by(sim)%>%lapply(coordinates,function(x)metriccalculation(coordinates$x,coordinates$y,emptylist))
 

ПРАВКА 3:

Хорошо, я проверил в Интернете, и есть возможный способ передачи нескольких переменных через функцию apply. Это приводит к:

 coordinates%>%group_by(sim)%>%apply(coordinates,metriccalculation,x=coordinates$x,y=coordinates$y,r=emptylist)

 

И новая ошибка,

 Error in d[-MARGIN] : invalid subscript type 'list'
 

Комментарии:

1. Что вы подразумеваете под списком, сгруппированным по переменной sim? Что такое сгруппированный список? Вы можете создать вложенный список, если хотите, такой, чтобы в нем было 10 записей (соответствующих сим 1 - 10), а затем у каждой из этих записей был список шаблонов точек. Это то, чего ты хочешь? То, что у вас сейчас есть, кажется очень запутанным. Это не coordinates кадр data.frame (конец списка) длиной 3, и ваш вызов lapply затем повторяется по этим 3 столбцам (x, y, sim), что, скорее всего, не то, что вы хотите. Четко объясните, чего вы хотите в качестве конечного результата, и мы, возможно, сможем вам помочь.

2. "Вы можете создать вложенный список, если хотите, такой, чтобы в нем было 10 записей (соответствующих сим 1 - 10), а затем у каждой из этих записей был список шаблонов точек. Это то, чего ты хочешь?" Да, именно этого я и хочу. "Не то, чтобы координаты были кадром data.frame (конечным, следовательно, списком) длиной 3, и ваш вызов lapply затем повторяется по этим 3 столбцам (x, y, sim), что, скорее всего, не то, что вы хотите. "Я не понимаю, как это не data.frame, потому что я создал его со строкой ` координаты<-data.frame(x,y,sim) координаты Но я вижу, что это не то, чего я хочу.

3. A data.frame -это просто специальное list приложение, в котором все элементы имеют одинаковую длину. То coordinates же самое относится и к а, и data.frame к а list . В приведенном ниже ответе я не составляю вложенный список, а просто простой список, в котором каждый элемент представляет собой одноточечный шаблон. Я думаю, что это то, что вы хотите, но если у вас есть более одного шаблона точек для каждого значения sim - карты, это, вероятно, не так.

Ответ №1:

Если вам действительно просто нужен список из 10 точечных шаблонов со 100 однородными случайными точками, вы можете сделать:

 library(spatstat)
rslt <- runifpoint(100, win = square(1000), nsim = 10)
rslt # Is a list with extra spatstat class `solist` (spatial object list)
#> List of point patterns
#> 
#> Simulation 1:
#> Planar point pattern: 100 points
#> window: rectangle = [0, 1000] x [0, 1000] units
#> 
#> Simulation 2:
#> Planar point pattern: 100 points
#> window: rectangle = [0, 1000] x [0, 1000] units
#> 
#> Simulation 3:
#> Planar point pattern: 100 points
#> window: rectangle = [0, 1000] x [0, 1000] units
#> 
#> Simulation 4:
#> Planar point pattern: 100 points
#> window: rectangle = [0, 1000] x [0, 1000] units
#> 
#> Simulation 5:
#> Planar point pattern: 100 points
#> window: rectangle = [0, 1000] x [0, 1000] units
#> 
#> Simulation 6:
#> Planar point pattern: 100 points
#> window: rectangle = [0, 1000] x [0, 1000] units
#> 
#> Simulation 7:
#> Planar point pattern: 100 points
#> window: rectangle = [0, 1000] x [0, 1000] units
#> 
#> Simulation 8:
#> Planar point pattern: 100 points
#> window: rectangle = [0, 1000] x [0, 1000] units
#> 
#> Simulation 9:
#> Planar point pattern: 100 points
#> window: rectangle = [0, 1000] x [0, 1000] units
#> 
#> Simulation 10:
#> Planar point pattern: 100 points
#> window: rectangle = [0, 1000] x [0, 1000] units
plot(rslt)
 

Если вы хотите разделить свой data.frame с координатами на 10 различных
шаблонов точек, которые вы можете сделать (повторно используя свой код):

3`
#> Planar point pattern: 100 points
#> window: rectangle = [0, 1000] x [0, 1000] units
#>
#>

#r #function #tidyr #spatstat

Вопрос:

Я пытаюсь создать список ландшафтных объектов, которые были сгруппированы в соответствии с переменной, называемой sim. В идеале мне нужен список с ландшафтными объектами, который можно назвать т. е.

 
[[1]]

Planar point pattern: 100 points
window: rectangle = [0, 1000] x [0, 1000] units

[[2]]

Planar point pattern: 100 points
window: rectangle = [0, 1000] x [0, 1000] units

 

Код, который я пробовал до сих пор, таков:

 
library(tidyr)
library(spatstat)

set.seed(23)

x<-runif(1000)*1000
y<-runif(1000)*1000
sim<-rep(1:10,100)

coordinates<-data.frame(x,y,sim)

coordinates<-coordinates[order(sim),]

emptylist<-vector(mode="list",length=10)
metriccalculation<-function(x,y){
  emptylist<-ppp(x,y,owin(xrange=c(0,1000),yrange=c(0,1000)))
}

coordinates%>%group_by(sim)%>%lapply(coordinates,function(x)metriccalculation(coordinates$x,coordinates$y))

 

Это возвращает ошибку:

 Error in get(as.character(FUN), mode = "function", envir = envir) : 
  object 'coordinates' of mode 'function' was not found
 

ПРАВКА 1: Я попытался добавить пустой список в качестве переменной в функцию metriccalculation, вернув ту же ошибку.

 metriccalculation<-function(x,y,r){
  r<-ppp(x,y,owin(xrange=c(0,1000),yrange=c(0,1000)))
}

coordinates%>%group_by(sim)%>%lapply(coordinates,function(x)metriccalculation(coordinates$x,coordinates$y,emptylist))
 

ПРАВКА 2: Я попытался добавить дополнение к функции, чтобы список был заполнен. Это также привело к той же ошибке.

 emptylist<-vector(mode="list",length=10)
metriccalculation<-function(x,y,r){
  r<-append(r,(ppp(x,y,owin(xrange=c(0,1000),yrange=c(0,1000)))))
}

coordinates%>%group_by(sim)%>%lapply(coordinates,function(x)metriccalculation(coordinates$x,coordinates$y,emptylist))
 

ПРАВКА 3:

Хорошо, я проверил в Интернете, и есть возможный способ передачи нескольких переменных через функцию apply. Это приводит к:

 coordinates%>%group_by(sim)%>%apply(coordinates,metriccalculation,x=coordinates$x,y=coordinates$y,r=emptylist)

 

И новая ошибка,

 Error in d[-MARGIN] : invalid subscript type 'list'
 

Комментарии:

1. Что вы подразумеваете под списком, сгруппированным по переменной sim? Что такое сгруппированный список? Вы можете создать вложенный список, если хотите, такой, чтобы в нем было 10 записей (соответствующих сим 1 - 10), а затем у каждой из этих записей был список шаблонов точек. Это то, чего ты хочешь? То, что у вас сейчас есть, кажется очень запутанным. Это не coordinates кадр data.frame (конец списка) длиной 3, и ваш вызов lapply затем повторяется по этим 3 столбцам (x, y, sim), что, скорее всего, не то, что вы хотите. Четко объясните, чего вы хотите в качестве конечного результата, и мы, возможно, сможем вам помочь.

2. "Вы можете создать вложенный список, если хотите, такой, чтобы в нем было 10 записей (соответствующих сим 1 - 10), а затем у каждой из этих записей был список шаблонов точек. Это то, чего ты хочешь?" Да, именно этого я и хочу. "Не то, чтобы координаты были кадром data.frame (конечным, следовательно, списком) длиной 3, и ваш вызов lapply затем повторяется по этим 3 столбцам (x, y, sim), что, скорее всего, не то, что вы хотите. "Я не понимаю, как это не data.frame, потому что я создал его со строкой ` координаты<-data.frame(x,y,sim) координаты Но я вижу, что это не то, чего я хочу.

3. A data.frame -это просто специальное list приложение, в котором все элементы имеют одинаковую длину. То coordinates же самое относится и к а, и data.frame к а list . В приведенном ниже ответе я не составляю вложенный список, а просто простой список, в котором каждый элемент представляет собой одноточечный шаблон. Я думаю, что это то, что вы хотите, но если у вас есть более одного шаблона точек для каждого значения sim - карты, это, вероятно, не так.

Ответ №1:

Если вам действительно просто нужен список из 10 точечных шаблонов со 100 однородными случайными точками, вы можете сделать:

 library(spatstat)
rslt <- runifpoint(100, win = square(1000), nsim = 10)
rslt # Is a list with extra spatstat class `solist` (spatial object list)
#> List of point patterns
#> 
#> Simulation 1:
#> Planar point pattern: 100 points
#> window: rectangle = [0, 1000] x [0, 1000] units
#> 
#> Simulation 2:
#> Planar point pattern: 100 points
#> window: rectangle = [0, 1000] x [0, 1000] units
#> 
#> Simulation 3:
#> Planar point pattern: 100 points
#> window: rectangle = [0, 1000] x [0, 1000] units
#> 
#> Simulation 4:
#> Planar point pattern: 100 points
#> window: rectangle = [0, 1000] x [0, 1000] units
#> 
#> Simulation 5:
#> Planar point pattern: 100 points
#> window: rectangle = [0, 1000] x [0, 1000] units
#> 
#> Simulation 6:
#> Planar point pattern: 100 points
#> window: rectangle = [0, 1000] x [0, 1000] units
#> 
#> Simulation 7:
#> Planar point pattern: 100 points
#> window: rectangle = [0, 1000] x [0, 1000] units
#> 
#> Simulation 8:
#> Planar point pattern: 100 points
#> window: rectangle = [0, 1000] x [0, 1000] units
#> 
#> Simulation 9:
#> Planar point pattern: 100 points
#> window: rectangle = [0, 1000] x [0, 1000] units
#> 
#> Simulation 10:
#> Planar point pattern: 100 points
#> window: rectangle = [0, 1000] x [0, 1000] units
plot(rslt)
 

Если вы хотите разделить свой data.frame с координатами на 10 различных
шаблонов точек, которые вы можете сделать (повторно используя свой код):

4`
#> Planar point pattern: 100 points
#> window: rectangle = [0, 1000] x [0, 1000] units
#>
#>

#r #function #tidyr #spatstat

Вопрос:

Я пытаюсь создать список ландшафтных объектов, которые были сгруппированы в соответствии с переменной, называемой sim. В идеале мне нужен список с ландшафтными объектами, который можно назвать т. е.

 
[[1]]

Planar point pattern: 100 points
window: rectangle = [0, 1000] x [0, 1000] units

[[2]]

Planar point pattern: 100 points
window: rectangle = [0, 1000] x [0, 1000] units

 

Код, который я пробовал до сих пор, таков:

 
library(tidyr)
library(spatstat)

set.seed(23)

x<-runif(1000)*1000
y<-runif(1000)*1000
sim<-rep(1:10,100)

coordinates<-data.frame(x,y,sim)

coordinates<-coordinates[order(sim),]

emptylist<-vector(mode="list",length=10)
metriccalculation<-function(x,y){
  emptylist<-ppp(x,y,owin(xrange=c(0,1000),yrange=c(0,1000)))
}

coordinates%>%group_by(sim)%>%lapply(coordinates,function(x)metriccalculation(coordinates$x,coordinates$y))

 

Это возвращает ошибку:

 Error in get(as.character(FUN), mode = "function", envir = envir) : 
  object 'coordinates' of mode 'function' was not found
 

ПРАВКА 1: Я попытался добавить пустой список в качестве переменной в функцию metriccalculation, вернув ту же ошибку.

 metriccalculation<-function(x,y,r){
  r<-ppp(x,y,owin(xrange=c(0,1000),yrange=c(0,1000)))
}

coordinates%>%group_by(sim)%>%lapply(coordinates,function(x)metriccalculation(coordinates$x,coordinates$y,emptylist))
 

ПРАВКА 2: Я попытался добавить дополнение к функции, чтобы список был заполнен. Это также привело к той же ошибке.

 emptylist<-vector(mode="list",length=10)
metriccalculation<-function(x,y,r){
  r<-append(r,(ppp(x,y,owin(xrange=c(0,1000),yrange=c(0,1000)))))
}

coordinates%>%group_by(sim)%>%lapply(coordinates,function(x)metriccalculation(coordinates$x,coordinates$y,emptylist))
 

ПРАВКА 3:

Хорошо, я проверил в Интернете, и есть возможный способ передачи нескольких переменных через функцию apply. Это приводит к:

 coordinates%>%group_by(sim)%>%apply(coordinates,metriccalculation,x=coordinates$x,y=coordinates$y,r=emptylist)

 

И новая ошибка,

 Error in d[-MARGIN] : invalid subscript type 'list'
 

Комментарии:

1. Что вы подразумеваете под списком, сгруппированным по переменной sim? Что такое сгруппированный список? Вы можете создать вложенный список, если хотите, такой, чтобы в нем было 10 записей (соответствующих сим 1 - 10), а затем у каждой из этих записей был список шаблонов точек. Это то, чего ты хочешь? То, что у вас сейчас есть, кажется очень запутанным. Это не coordinates кадр data.frame (конец списка) длиной 3, и ваш вызов lapply затем повторяется по этим 3 столбцам (x, y, sim), что, скорее всего, не то, что вы хотите. Четко объясните, чего вы хотите в качестве конечного результата, и мы, возможно, сможем вам помочь.

2. "Вы можете создать вложенный список, если хотите, такой, чтобы в нем было 10 записей (соответствующих сим 1 - 10), а затем у каждой из этих записей был список шаблонов точек. Это то, чего ты хочешь?" Да, именно этого я и хочу. "Не то, чтобы координаты были кадром data.frame (конечным, следовательно, списком) длиной 3, и ваш вызов lapply затем повторяется по этим 3 столбцам (x, y, sim), что, скорее всего, не то, что вы хотите. "Я не понимаю, как это не data.frame, потому что я создал его со строкой ` координаты<-data.frame(x,y,sim) координаты Но я вижу, что это не то, чего я хочу.

3. A data.frame -это просто специальное list приложение, в котором все элементы имеют одинаковую длину. То coordinates же самое относится и к а, и data.frame к а list . В приведенном ниже ответе я не составляю вложенный список, а просто простой список, в котором каждый элемент представляет собой одноточечный шаблон. Я думаю, что это то, что вы хотите, но если у вас есть более одного шаблона точек для каждого значения sim - карты, это, вероятно, не так.

Ответ №1:

Если вам действительно просто нужен список из 10 точечных шаблонов со 100 однородными случайными точками, вы можете сделать:

 library(spatstat)
rslt <- runifpoint(100, win = square(1000), nsim = 10)
rslt # Is a list with extra spatstat class `solist` (spatial object list)
#> List of point patterns
#> 
#> Simulation 1:
#> Planar point pattern: 100 points
#> window: rectangle = [0, 1000] x [0, 1000] units
#> 
#> Simulation 2:
#> Planar point pattern: 100 points
#> window: rectangle = [0, 1000] x [0, 1000] units
#> 
#> Simulation 3:
#> Planar point pattern: 100 points
#> window: rectangle = [0, 1000] x [0, 1000] units
#> 
#> Simulation 4:
#> Planar point pattern: 100 points
#> window: rectangle = [0, 1000] x [0, 1000] units
#> 
#> Simulation 5:
#> Planar point pattern: 100 points
#> window: rectangle = [0, 1000] x [0, 1000] units
#> 
#> Simulation 6:
#> Planar point pattern: 100 points
#> window: rectangle = [0, 1000] x [0, 1000] units
#> 
#> Simulation 7:
#> Planar point pattern: 100 points
#> window: rectangle = [0, 1000] x [0, 1000] units
#> 
#> Simulation 8:
#> Planar point pattern: 100 points
#> window: rectangle = [0, 1000] x [0, 1000] units
#> 
#> Simulation 9:
#> Planar point pattern: 100 points
#> window: rectangle = [0, 1000] x [0, 1000] units
#> 
#> Simulation 10:
#> Planar point pattern: 100 points
#> window: rectangle = [0, 1000] x [0, 1000] units
plot(rslt)
 

Если вы хотите разделить свой data.frame с координатами на 10 различных
шаблонов точек, которые вы можете сделать (повторно используя свой код):

5`
#> Planar point pattern: 100 points
#> window: rectangle = [0, 1000] x [0, 1000] units
#>
#>

#r #function #tidyr #spatstat

Вопрос:

Я пытаюсь создать список ландшафтных объектов, которые были сгруппированы в соответствии с переменной, называемой sim. В идеале мне нужен список с ландшафтными объектами, который можно назвать т. е.

 
[[1]]

Planar point pattern: 100 points
window: rectangle = [0, 1000] x [0, 1000] units

[[2]]

Planar point pattern: 100 points
window: rectangle = [0, 1000] x [0, 1000] units

 

Код, который я пробовал до сих пор, таков:

 
library(tidyr)
library(spatstat)

set.seed(23)

x<-runif(1000)*1000
y<-runif(1000)*1000
sim<-rep(1:10,100)

coordinates<-data.frame(x,y,sim)

coordinates<-coordinates[order(sim),]

emptylist<-vector(mode="list",length=10)
metriccalculation<-function(x,y){
  emptylist<-ppp(x,y,owin(xrange=c(0,1000),yrange=c(0,1000)))
}

coordinates%>%group_by(sim)%>%lapply(coordinates,function(x)metriccalculation(coordinates$x,coordinates$y))

 

Это возвращает ошибку:

 Error in get(as.character(FUN), mode = "function", envir = envir) : 
  object 'coordinates' of mode 'function' was not found
 

ПРАВКА 1: Я попытался добавить пустой список в качестве переменной в функцию metriccalculation, вернув ту же ошибку.

 metriccalculation<-function(x,y,r){
  r<-ppp(x,y,owin(xrange=c(0,1000),yrange=c(0,1000)))
}

coordinates%>%group_by(sim)%>%lapply(coordinates,function(x)metriccalculation(coordinates$x,coordinates$y,emptylist))
 

ПРАВКА 2: Я попытался добавить дополнение к функции, чтобы список был заполнен. Это также привело к той же ошибке.

 emptylist<-vector(mode="list",length=10)
metriccalculation<-function(x,y,r){
  r<-append(r,(ppp(x,y,owin(xrange=c(0,1000),yrange=c(0,1000)))))
}

coordinates%>%group_by(sim)%>%lapply(coordinates,function(x)metriccalculation(coordinates$x,coordinates$y,emptylist))
 

ПРАВКА 3:

Хорошо, я проверил в Интернете, и есть возможный способ передачи нескольких переменных через функцию apply. Это приводит к:

 coordinates%>%group_by(sim)%>%apply(coordinates,metriccalculation,x=coordinates$x,y=coordinates$y,r=emptylist)

 

И новая ошибка,

 Error in d[-MARGIN] : invalid subscript type 'list'
 

Комментарии:

1. Что вы подразумеваете под списком, сгруппированным по переменной sim? Что такое сгруппированный список? Вы можете создать вложенный список, если хотите, такой, чтобы в нем было 10 записей (соответствующих сим 1 - 10), а затем у каждой из этих записей был список шаблонов точек. Это то, чего ты хочешь? То, что у вас сейчас есть, кажется очень запутанным. Это не coordinates кадр data.frame (конец списка) длиной 3, и ваш вызов lapply затем повторяется по этим 3 столбцам (x, y, sim), что, скорее всего, не то, что вы хотите. Четко объясните, чего вы хотите в качестве конечного результата, и мы, возможно, сможем вам помочь.

2. "Вы можете создать вложенный список, если хотите, такой, чтобы в нем было 10 записей (соответствующих сим 1 - 10), а затем у каждой из этих записей был список шаблонов точек. Это то, чего ты хочешь?" Да, именно этого я и хочу. "Не то, чтобы координаты были кадром data.frame (конечным, следовательно, списком) длиной 3, и ваш вызов lapply затем повторяется по этим 3 столбцам (x, y, sim), что, скорее всего, не то, что вы хотите. "Я не понимаю, как это не data.frame, потому что я создал его со строкой ` координаты<-data.frame(x,y,sim) координаты Но я вижу, что это не то, чего я хочу.

3. A data.frame -это просто специальное list приложение, в котором все элементы имеют одинаковую длину. То coordinates же самое относится и к а, и data.frame к а list . В приведенном ниже ответе я не составляю вложенный список, а просто простой список, в котором каждый элемент представляет собой одноточечный шаблон. Я думаю, что это то, что вы хотите, но если у вас есть более одного шаблона точек для каждого значения sim - карты, это, вероятно, не так.

Ответ №1:

Если вам действительно просто нужен список из 10 точечных шаблонов со 100 однородными случайными точками, вы можете сделать:

 library(spatstat)
rslt <- runifpoint(100, win = square(1000), nsim = 10)
rslt # Is a list with extra spatstat class `solist` (spatial object list)
#> List of point patterns
#> 
#> Simulation 1:
#> Planar point pattern: 100 points
#> window: rectangle = [0, 1000] x [0, 1000] units
#> 
#> Simulation 2:
#> Planar point pattern: 100 points
#> window: rectangle = [0, 1000] x [0, 1000] units
#> 
#> Simulation 3:
#> Planar point pattern: 100 points
#> window: rectangle = [0, 1000] x [0, 1000] units
#> 
#> Simulation 4:
#> Planar point pattern: 100 points
#> window: rectangle = [0, 1000] x [0, 1000] units
#> 
#> Simulation 5:
#> Planar point pattern: 100 points
#> window: rectangle = [0, 1000] x [0, 1000] units
#> 
#> Simulation 6:
#> Planar point pattern: 100 points
#> window: rectangle = [0, 1000] x [0, 1000] units
#> 
#> Simulation 7:
#> Planar point pattern: 100 points
#> window: rectangle = [0, 1000] x [0, 1000] units
#> 
#> Simulation 8:
#> Planar point pattern: 100 points
#> window: rectangle = [0, 1000] x [0, 1000] units
#> 
#> Simulation 9:
#> Planar point pattern: 100 points
#> window: rectangle = [0, 1000] x [0, 1000] units
#> 
#> Simulation 10:
#> Planar point pattern: 100 points
#> window: rectangle = [0, 1000] x [0, 1000] units
plot(rslt)
 

Если вы хотите разделить свой data.frame с координатами на 10 различных
шаблонов точек, которые вы можете сделать (повторно используя свой код):

6`
#> Planar point pattern: 100 points
#> window: rectangle = [0, 1000] x [0, 1000] units
#>
#>

#r #function #tidyr #spatstat

Вопрос:

Я пытаюсь создать список ландшафтных объектов, которые были сгруппированы в соответствии с переменной, называемой sim. В идеале мне нужен список с ландшафтными объектами, который можно назвать т. е.

 
[[1]]

Planar point pattern: 100 points
window: rectangle = [0, 1000] x [0, 1000] units

[[2]]

Planar point pattern: 100 points
window: rectangle = [0, 1000] x [0, 1000] units

 

Код, который я пробовал до сих пор, таков:

 
library(tidyr)
library(spatstat)

set.seed(23)

x<-runif(1000)*1000
y<-runif(1000)*1000
sim<-rep(1:10,100)

coordinates<-data.frame(x,y,sim)

coordinates<-coordinates[order(sim),]

emptylist<-vector(mode="list",length=10)
metriccalculation<-function(x,y){
  emptylist<-ppp(x,y,owin(xrange=c(0,1000),yrange=c(0,1000)))
}

coordinates%>%group_by(sim)%>%lapply(coordinates,function(x)metriccalculation(coordinates$x,coordinates$y))

 

Это возвращает ошибку:

 Error in get(as.character(FUN), mode = "function", envir = envir) : 
  object 'coordinates' of mode 'function' was not found
 

ПРАВКА 1: Я попытался добавить пустой список в качестве переменной в функцию metriccalculation, вернув ту же ошибку.

 metriccalculation<-function(x,y,r){
  r<-ppp(x,y,owin(xrange=c(0,1000),yrange=c(0,1000)))
}

coordinates%>%group_by(sim)%>%lapply(coordinates,function(x)metriccalculation(coordinates$x,coordinates$y,emptylist))
 

ПРАВКА 2: Я попытался добавить дополнение к функции, чтобы список был заполнен. Это также привело к той же ошибке.

 emptylist<-vector(mode="list",length=10)
metriccalculation<-function(x,y,r){
  r<-append(r,(ppp(x,y,owin(xrange=c(0,1000),yrange=c(0,1000)))))
}

coordinates%>%group_by(sim)%>%lapply(coordinates,function(x)metriccalculation(coordinates$x,coordinates$y,emptylist))
 

ПРАВКА 3:

Хорошо, я проверил в Интернете, и есть возможный способ передачи нескольких переменных через функцию apply. Это приводит к:

 coordinates%>%group_by(sim)%>%apply(coordinates,metriccalculation,x=coordinates$x,y=coordinates$y,r=emptylist)

 

И новая ошибка,

 Error in d[-MARGIN] : invalid subscript type 'list'
 

Комментарии:

1. Что вы подразумеваете под списком, сгруппированным по переменной sim? Что такое сгруппированный список? Вы можете создать вложенный список, если хотите, такой, чтобы в нем было 10 записей (соответствующих сим 1 - 10), а затем у каждой из этих записей был список шаблонов точек. Это то, чего ты хочешь? То, что у вас сейчас есть, кажется очень запутанным. Это не coordinates кадр data.frame (конец списка) длиной 3, и ваш вызов lapply затем повторяется по этим 3 столбцам (x, y, sim), что, скорее всего, не то, что вы хотите. Четко объясните, чего вы хотите в качестве конечного результата, и мы, возможно, сможем вам помочь.

2. "Вы можете создать вложенный список, если хотите, такой, чтобы в нем было 10 записей (соответствующих сим 1 - 10), а затем у каждой из этих записей был список шаблонов точек. Это то, чего ты хочешь?" Да, именно этого я и хочу. "Не то, чтобы координаты были кадром data.frame (конечным, следовательно, списком) длиной 3, и ваш вызов lapply затем повторяется по этим 3 столбцам (x, y, sim), что, скорее всего, не то, что вы хотите. "Я не понимаю, как это не data.frame, потому что я создал его со строкой ` координаты<-data.frame(x,y,sim) координаты Но я вижу, что это не то, чего я хочу.

3. A data.frame -это просто специальное list приложение, в котором все элементы имеют одинаковую длину. То coordinates же самое относится и к а, и data.frame к а list . В приведенном ниже ответе я не составляю вложенный список, а просто простой список, в котором каждый элемент представляет собой одноточечный шаблон. Я думаю, что это то, что вы хотите, но если у вас есть более одного шаблона точек для каждого значения sim - карты, это, вероятно, не так.

Ответ №1:

Если вам действительно просто нужен список из 10 точечных шаблонов со 100 однородными случайными точками, вы можете сделать:

 library(spatstat)
rslt <- runifpoint(100, win = square(1000), nsim = 10)
rslt # Is a list with extra spatstat class `solist` (spatial object list)
#> List of point patterns
#> 
#> Simulation 1:
#> Planar point pattern: 100 points
#> window: rectangle = [0, 1000] x [0, 1000] units
#> 
#> Simulation 2:
#> Planar point pattern: 100 points
#> window: rectangle = [0, 1000] x [0, 1000] units
#> 
#> Simulation 3:
#> Planar point pattern: 100 points
#> window: rectangle = [0, 1000] x [0, 1000] units
#> 
#> Simulation 4:
#> Planar point pattern: 100 points
#> window: rectangle = [0, 1000] x [0, 1000] units
#> 
#> Simulation 5:
#> Planar point pattern: 100 points
#> window: rectangle = [0, 1000] x [0, 1000] units
#> 
#> Simulation 6:
#> Planar point pattern: 100 points
#> window: rectangle = [0, 1000] x [0, 1000] units
#> 
#> Simulation 7:
#> Planar point pattern: 100 points
#> window: rectangle = [0, 1000] x [0, 1000] units
#> 
#> Simulation 8:
#> Planar point pattern: 100 points
#> window: rectangle = [0, 1000] x [0, 1000] units
#> 
#> Simulation 9:
#> Planar point pattern: 100 points
#> window: rectangle = [0, 1000] x [0, 1000] units
#> 
#> Simulation 10:
#> Planar point pattern: 100 points
#> window: rectangle = [0, 1000] x [0, 1000] units
plot(rslt)
 

Если вы хотите разделить свой data.frame с координатами на 10 различных
шаблонов точек, которые вы можете сделать (повторно используя свой код):

7`
#> Planar point pattern: 100 points
#> window: rectangle = [0, 1000] x [0, 1000] units
#>
#>

#r #function #tidyr #spatstat

Вопрос:

Я пытаюсь создать список ландшафтных объектов, которые были сгруппированы в соответствии с переменной, называемой sim. В идеале мне нужен список с ландшафтными объектами, который можно назвать т. е.

 
[[1]]

Planar point pattern: 100 points
window: rectangle = [0, 1000] x [0, 1000] units

[[2]]

Planar point pattern: 100 points
window: rectangle = [0, 1000] x [0, 1000] units

 

Код, который я пробовал до сих пор, таков:

 
library(tidyr)
library(spatstat)

set.seed(23)

x<-runif(1000)*1000
y<-runif(1000)*1000
sim<-rep(1:10,100)

coordinates<-data.frame(x,y,sim)

coordinates<-coordinates[order(sim),]

emptylist<-vector(mode="list",length=10)
metriccalculation<-function(x,y){
  emptylist<-ppp(x,y,owin(xrange=c(0,1000),yrange=c(0,1000)))
}

coordinates%>%group_by(sim)%>%lapply(coordinates,function(x)metriccalculation(coordinates$x,coordinates$y))

 

Это возвращает ошибку:

 Error in get(as.character(FUN), mode = "function", envir = envir) : 
  object 'coordinates' of mode 'function' was not found
 

ПРАВКА 1: Я попытался добавить пустой список в качестве переменной в функцию metriccalculation, вернув ту же ошибку.

 metriccalculation<-function(x,y,r){
  r<-ppp(x,y,owin(xrange=c(0,1000),yrange=c(0,1000)))
}

coordinates%>%group_by(sim)%>%lapply(coordinates,function(x)metriccalculation(coordinates$x,coordinates$y,emptylist))
 

ПРАВКА 2: Я попытался добавить дополнение к функции, чтобы список был заполнен. Это также привело к той же ошибке.

 emptylist<-vector(mode="list",length=10)
metriccalculation<-function(x,y,r){
  r<-append(r,(ppp(x,y,owin(xrange=c(0,1000),yrange=c(0,1000)))))
}

coordinates%>%group_by(sim)%>%lapply(coordinates,function(x)metriccalculation(coordinates$x,coordinates$y,emptylist))
 

ПРАВКА 3:

Хорошо, я проверил в Интернете, и есть возможный способ передачи нескольких переменных через функцию apply. Это приводит к:

 coordinates%>%group_by(sim)%>%apply(coordinates,metriccalculation,x=coordinates$x,y=coordinates$y,r=emptylist)

 

И новая ошибка,

 Error in d[-MARGIN] : invalid subscript type 'list'
 

Комментарии:

1. Что вы подразумеваете под списком, сгруппированным по переменной sim? Что такое сгруппированный список? Вы можете создать вложенный список, если хотите, такой, чтобы в нем было 10 записей (соответствующих сим 1 - 10), а затем у каждой из этих записей был список шаблонов точек. Это то, чего ты хочешь? То, что у вас сейчас есть, кажется очень запутанным. Это не coordinates кадр data.frame (конец списка) длиной 3, и ваш вызов lapply затем повторяется по этим 3 столбцам (x, y, sim), что, скорее всего, не то, что вы хотите. Четко объясните, чего вы хотите в качестве конечного результата, и мы, возможно, сможем вам помочь.

2. "Вы можете создать вложенный список, если хотите, такой, чтобы в нем было 10 записей (соответствующих сим 1 - 10), а затем у каждой из этих записей был список шаблонов точек. Это то, чего ты хочешь?" Да, именно этого я и хочу. "Не то, чтобы координаты были кадром data.frame (конечным, следовательно, списком) длиной 3, и ваш вызов lapply затем повторяется по этим 3 столбцам (x, y, sim), что, скорее всего, не то, что вы хотите. "Я не понимаю, как это не data.frame, потому что я создал его со строкой ` координаты<-data.frame(x,y,sim) координаты Но я вижу, что это не то, чего я хочу.

3. A data.frame -это просто специальное list приложение, в котором все элементы имеют одинаковую длину. То coordinates же самое относится и к а, и data.frame к а list . В приведенном ниже ответе я не составляю вложенный список, а просто простой список, в котором каждый элемент представляет собой одноточечный шаблон. Я думаю, что это то, что вы хотите, но если у вас есть более одного шаблона точек для каждого значения sim - карты, это, вероятно, не так.

Ответ №1:

Если вам действительно просто нужен список из 10 точечных шаблонов со 100 однородными случайными точками, вы можете сделать:

 library(spatstat)
rslt <- runifpoint(100, win = square(1000), nsim = 10)
rslt # Is a list with extra spatstat class `solist` (spatial object list)
#> List of point patterns
#> 
#> Simulation 1:
#> Planar point pattern: 100 points
#> window: rectangle = [0, 1000] x [0, 1000] units
#> 
#> Simulation 2:
#> Planar point pattern: 100 points
#> window: rectangle = [0, 1000] x [0, 1000] units
#> 
#> Simulation 3:
#> Planar point pattern: 100 points
#> window: rectangle = [0, 1000] x [0, 1000] units
#> 
#> Simulation 4:
#> Planar point pattern: 100 points
#> window: rectangle = [0, 1000] x [0, 1000] units
#> 
#> Simulation 5:
#> Planar point pattern: 100 points
#> window: rectangle = [0, 1000] x [0, 1000] units
#> 
#> Simulation 6:
#> Planar point pattern: 100 points
#> window: rectangle = [0, 1000] x [0, 1000] units
#> 
#> Simulation 7:
#> Planar point pattern: 100 points
#> window: rectangle = [0, 1000] x [0, 1000] units
#> 
#> Simulation 8:
#> Planar point pattern: 100 points
#> window: rectangle = [0, 1000] x [0, 1000] units
#> 
#> Simulation 9:
#> Planar point pattern: 100 points
#> window: rectangle = [0, 1000] x [0, 1000] units
#> 
#> Simulation 10:
#> Planar point pattern: 100 points
#> window: rectangle = [0, 1000] x [0, 1000] units
plot(rslt)
 

Если вы хотите разделить свой data.frame с координатами на 10 различных
шаблонов точек, которые вы можете сделать (повторно используя свой код):

8`
#> Planar point pattern: 100 points
#> window: rectangle = [0, 1000] x [0, 1000] units
#>
#>

#r #function #tidyr #spatstat

Вопрос:

Я пытаюсь создать список ландшафтных объектов, которые были сгруппированы в соответствии с переменной, называемой sim. В идеале мне нужен список с ландшафтными объектами, который можно назвать т. е.

 
[[1]]

Planar point pattern: 100 points
window: rectangle = [0, 1000] x [0, 1000] units

[[2]]

Planar point pattern: 100 points
window: rectangle = [0, 1000] x [0, 1000] units

 

Код, который я пробовал до сих пор, таков:

 
library(tidyr)
library(spatstat)

set.seed(23)

x<-runif(1000)*1000
y<-runif(1000)*1000
sim<-rep(1:10,100)

coordinates<-data.frame(x,y,sim)

coordinates<-coordinates[order(sim),]

emptylist<-vector(mode="list",length=10)
metriccalculation<-function(x,y){
  emptylist<-ppp(x,y,owin(xrange=c(0,1000),yrange=c(0,1000)))
}

coordinates%>%group_by(sim)%>%lapply(coordinates,function(x)metriccalculation(coordinates$x,coordinates$y))

 

Это возвращает ошибку:

 Error in get(as.character(FUN), mode = "function", envir = envir) : 
  object 'coordinates' of mode 'function' was not found
 

ПРАВКА 1: Я попытался добавить пустой список в качестве переменной в функцию metriccalculation, вернув ту же ошибку.

 metriccalculation<-function(x,y,r){
  r<-ppp(x,y,owin(xrange=c(0,1000),yrange=c(0,1000)))
}

coordinates%>%group_by(sim)%>%lapply(coordinates,function(x)metriccalculation(coordinates$x,coordinates$y,emptylist))
 

ПРАВКА 2: Я попытался добавить дополнение к функции, чтобы список был заполнен. Это также привело к той же ошибке.

 emptylist<-vector(mode="list",length=10)
metriccalculation<-function(x,y,r){
  r<-append(r,(ppp(x,y,owin(xrange=c(0,1000),yrange=c(0,1000)))))
}

coordinates%>%group_by(sim)%>%lapply(coordinates,function(x)metriccalculation(coordinates$x,coordinates$y,emptylist))
 

ПРАВКА 3:

Хорошо, я проверил в Интернете, и есть возможный способ передачи нескольких переменных через функцию apply. Это приводит к:

 coordinates%>%group_by(sim)%>%apply(coordinates,metriccalculation,x=coordinates$x,y=coordinates$y,r=emptylist)

 

И новая ошибка,

 Error in d[-MARGIN] : invalid subscript type 'list'
 

Комментарии:

1. Что вы подразумеваете под списком, сгруппированным по переменной sim? Что такое сгруппированный список? Вы можете создать вложенный список, если хотите, такой, чтобы в нем было 10 записей (соответствующих сим 1 - 10), а затем у каждой из этих записей был список шаблонов точек. Это то, чего ты хочешь? То, что у вас сейчас есть, кажется очень запутанным. Это не coordinates кадр data.frame (конец списка) длиной 3, и ваш вызов lapply затем повторяется по этим 3 столбцам (x, y, sim), что, скорее всего, не то, что вы хотите. Четко объясните, чего вы хотите в качестве конечного результата, и мы, возможно, сможем вам помочь.

2. "Вы можете создать вложенный список, если хотите, такой, чтобы в нем было 10 записей (соответствующих сим 1 - 10), а затем у каждой из этих записей был список шаблонов точек. Это то, чего ты хочешь?" Да, именно этого я и хочу. "Не то, чтобы координаты были кадром data.frame (конечным, следовательно, списком) длиной 3, и ваш вызов lapply затем повторяется по этим 3 столбцам (x, y, sim), что, скорее всего, не то, что вы хотите. "Я не понимаю, как это не data.frame, потому что я создал его со строкой ` координаты<-data.frame(x,y,sim) координаты Но я вижу, что это не то, чего я хочу.

3. A data.frame -это просто специальное list приложение, в котором все элементы имеют одинаковую длину. То coordinates же самое относится и к а, и data.frame к а list . В приведенном ниже ответе я не составляю вложенный список, а просто простой список, в котором каждый элемент представляет собой одноточечный шаблон. Я думаю, что это то, что вы хотите, но если у вас есть более одного шаблона точек для каждого значения sim - карты, это, вероятно, не так.

Ответ №1:

Если вам действительно просто нужен список из 10 точечных шаблонов со 100 однородными случайными точками, вы можете сделать:

 library(spatstat)
rslt <- runifpoint(100, win = square(1000), nsim = 10)
rslt # Is a list with extra spatstat class `solist` (spatial object list)
#> List of point patterns
#> 
#> Simulation 1:
#> Planar point pattern: 100 points
#> window: rectangle = [0, 1000] x [0, 1000] units
#> 
#> Simulation 2:
#> Planar point pattern: 100 points
#> window: rectangle = [0, 1000] x [0, 1000] units
#> 
#> Simulation 3:
#> Planar point pattern: 100 points
#> window: rectangle = [0, 1000] x [0, 1000] units
#> 
#> Simulation 4:
#> Planar point pattern: 100 points
#> window: rectangle = [0, 1000] x [0, 1000] units
#> 
#> Simulation 5:
#> Planar point pattern: 100 points
#> window: rectangle = [0, 1000] x [0, 1000] units
#> 
#> Simulation 6:
#> Planar point pattern: 100 points
#> window: rectangle = [0, 1000] x [0, 1000] units
#> 
#> Simulation 7:
#> Planar point pattern: 100 points
#> window: rectangle = [0, 1000] x [0, 1000] units
#> 
#> Simulation 8:
#> Planar point pattern: 100 points
#> window: rectangle = [0, 1000] x [0, 1000] units
#> 
#> Simulation 9:
#> Planar point pattern: 100 points
#> window: rectangle = [0, 1000] x [0, 1000] units
#> 
#> Simulation 10:
#> Planar point pattern: 100 points
#> window: rectangle = [0, 1000] x [0, 1000] units
plot(rslt)
 

Если вы хотите разделить свой data.frame с координатами на 10 различных
шаблонов точек, которые вы можете сделать (повторно используя свой код):

9`
#> Planar point pattern: 100 points
#> window: rectangle = [0, 1000] x [0, 1000] units
#>
#>

#r #function #tidyr #spatstat

Вопрос:

Я пытаюсь создать список ландшафтных объектов, которые были сгруппированы в соответствии с переменной, называемой sim. В идеале мне нужен список с ландшафтными объектами, который можно назвать т. е.

 
[[1]]

Planar point pattern: 100 points
window: rectangle = [0, 1000] x [0, 1000] units

[[2]]

Planar point pattern: 100 points
window: rectangle = [0, 1000] x [0, 1000] units

 

Код, который я пробовал до сих пор, таков:

 
library(tidyr)
library(spatstat)

set.seed(23)

x<-runif(1000)*1000
y<-runif(1000)*1000
sim<-rep(1:10,100)

coordinates<-data.frame(x,y,sim)

coordinates<-coordinates[order(sim),]

emptylist<-vector(mode="list",length=10)
metriccalculation<-function(x,y){
  emptylist<-ppp(x,y,owin(xrange=c(0,1000),yrange=c(0,1000)))
}

coordinates%>%group_by(sim)%>%lapply(coordinates,function(x)metriccalculation(coordinates$x,coordinates$y))

 

Это возвращает ошибку:

 Error in get(as.character(FUN), mode = "function", envir = envir) : 
  object 'coordinates' of mode 'function' was not found
 

ПРАВКА 1: Я попытался добавить пустой список в качестве переменной в функцию metriccalculation, вернув ту же ошибку.

 metriccalculation<-function(x,y,r){
  r<-ppp(x,y,owin(xrange=c(0,1000),yrange=c(0,1000)))
}

coordinates%>%group_by(sim)%>%lapply(coordinates,function(x)metriccalculation(coordinates$x,coordinates$y,emptylist))
 

ПРАВКА 2: Я попытался добавить дополнение к функции, чтобы список был заполнен. Это также привело к той же ошибке.

 emptylist<-vector(mode="list",length=10)
metriccalculation<-function(x,y,r){
  r<-append(r,(ppp(x,y,owin(xrange=c(0,1000),yrange=c(0,1000)))))
}

coordinates%>%group_by(sim)%>%lapply(coordinates,function(x)metriccalculation(coordinates$x,coordinates$y,emptylist))
 

ПРАВКА 3:

Хорошо, я проверил в Интернете, и есть возможный способ передачи нескольких переменных через функцию apply. Это приводит к:

 coordinates%>%group_by(sim)%>%apply(coordinates,metriccalculation,x=coordinates$x,y=coordinates$y,r=emptylist)

 

И новая ошибка,

 Error in d[-MARGIN] : invalid subscript type 'list'
 

Комментарии:

1. Что вы подразумеваете под списком, сгруппированным по переменной sim? Что такое сгруппированный список? Вы можете создать вложенный список, если хотите, такой, чтобы в нем было 10 записей (соответствующих сим 1 - 10), а затем у каждой из этих записей был список шаблонов точек. Это то, чего ты хочешь? То, что у вас сейчас есть, кажется очень запутанным. Это не coordinates кадр data.frame (конец списка) длиной 3, и ваш вызов lapply затем повторяется по этим 3 столбцам (x, y, sim), что, скорее всего, не то, что вы хотите. Четко объясните, чего вы хотите в качестве конечного результата, и мы, возможно, сможем вам помочь.

2. "Вы можете создать вложенный список, если хотите, такой, чтобы в нем было 10 записей (соответствующих сим 1 - 10), а затем у каждой из этих записей был список шаблонов точек. Это то, чего ты хочешь?" Да, именно этого я и хочу. "Не то, чтобы координаты были кадром data.frame (конечным, следовательно, списком) длиной 3, и ваш вызов lapply затем повторяется по этим 3 столбцам (x, y, sim), что, скорее всего, не то, что вы хотите. "Я не понимаю, как это не data.frame, потому что я создал его со строкой ` координаты<-data.frame(x,y,sim) координаты Но я вижу, что это не то, чего я хочу.

3. A data.frame -это просто специальное list приложение, в котором все элементы имеют одинаковую длину. То coordinates же самое относится и к а, и data.frame к а list . В приведенном ниже ответе я не составляю вложенный список, а просто простой список, в котором каждый элемент представляет собой одноточечный шаблон. Я думаю, что это то, что вы хотите, но если у вас есть более одного шаблона точек для каждого значения sim - карты, это, вероятно, не так.

Ответ №1:

Если вам действительно просто нужен список из 10 точечных шаблонов со 100 однородными случайными точками, вы можете сделать:

 library(spatstat)
rslt <- runifpoint(100, win = square(1000), nsim = 10)
rslt # Is a list with extra spatstat class `solist` (spatial object list)
#> List of point patterns
#> 
#> Simulation 1:
#> Planar point pattern: 100 points
#> window: rectangle = [0, 1000] x [0, 1000] units
#> 
#> Simulation 2:
#> Planar point pattern: 100 points
#> window: rectangle = [0, 1000] x [0, 1000] units
#> 
#> Simulation 3:
#> Planar point pattern: 100 points
#> window: rectangle = [0, 1000] x [0, 1000] units
#> 
#> Simulation 4:
#> Planar point pattern: 100 points
#> window: rectangle = [0, 1000] x [0, 1000] units
#> 
#> Simulation 5:
#> Planar point pattern: 100 points
#> window: rectangle = [0, 1000] x [0, 1000] units
#> 
#> Simulation 6:
#> Planar point pattern: 100 points
#> window: rectangle = [0, 1000] x [0, 1000] units
#> 
#> Simulation 7:
#> Planar point pattern: 100 points
#> window: rectangle = [0, 1000] x [0, 1000] units
#> 
#> Simulation 8:
#> Planar point pattern: 100 points
#> window: rectangle = [0, 1000] x [0, 1000] units
#> 
#> Simulation 9:
#> Planar point pattern: 100 points
#> window: rectangle = [0, 1000] x [0, 1000] units
#> 
#> Simulation 10:
#> Planar point pattern: 100 points
#> window: rectangle = [0, 1000] x [0, 1000] units
plot(rslt)
 

Если вы хотите разделить свой data.frame с координатами на 10 различных
шаблонов точек, которые вы можете сделать (повторно используя свой код):

10`
#> Planar point pattern: 100 points
#> window: rectangle = [0, 1000] x [0, 1000] units
plot(as.solist(rslt2))

Комментарии:

1. Большое вам спасибо, я очень благодарен за этот вклад. Более того, я многому научился.

2. Рад помочь @opensauce. Пожалуйста, нажмите галочку рядом с ответом, чтобы отметить его как принятый ответ для будущих читателей.