无法修改 psp 对象的子集
Cannot modify subset of psp object
全部,
我正在尝试修改 R 包 spatstat 中的 psp 对象的子集。这是给我一个问题的代码:
set.seed(10)
mat <- matrix(runif(40), ncol=4)
mx <- data.frame(v1=sample(1:4,10,TRUE),
v2=factor(sample(letters[1:4],10,TRUE),levels=letters[1:4]))
a <- as.psp(mat, window=owin(),marks=mx)
#subset to marking v1 = 2, modify one of its endpoints
a[a$marks$v1==2]$ends$x0<-rep(5,4)
这向我发出警告:
Warning message:
In a[a$marks$v1 == 2]$ends$x0 <- rep(5, 4) :
number of items to replace is not a multiple of replacement length
修改psp对象的某些元素的正确方法是什么?我通常将此操作与数据框一起使用,没有问题。我的感觉是子集运算符 ([) 没有为此操作设置 psp class.
感谢您的阅读;感谢您提供的任何帮助。
这里的问题是您正试图写入 psp
对象的一个子集。尽管为此 class 定义了 [
运算符,因此您可以 从中提取子集 ,但未定义 [<-
运算符,因此您可以't 覆盖一个子集。
但是,您试图覆盖的成员是一个数据框,它当然定义了一个 [<-
运算符。所以你需要做的就是写入它而不对实际的 psp
对象进行子集化。
这是一个完整的代表:
library(spatstat)
set.seed(10)
mat <- matrix(runif(40), ncol = 4)
mx <- data.frame(v1 = sample(1:4, 10, TRUE),
v2 = factor(sample(letters[1:4], 10, TRUE),
levels = letters[1:4]))
a <- as.psp(mat, window = owin(), marks = mx)
#subset to marking v1 = 2, modify one of its endpoints
a$ends$x0[a$marks$v1 == 2] <- rep(5, 4)
a
#> marked planar line segment pattern: 10 line segments
#> Mark variables: v1, v2
#> window: rectangle = [0, 1] x [0, 1] units
由 reprex package (v0.3.0)
于 2020-08-18 创建
我将把它作为一个功能请求,为 [<-
添加一个方法 class psp
。
通常我们建议不要直接更改 spatstat
中对象的组件,因为这会破坏它们的内部一致性。所以 [<-
的方法将是最好的解决方案。
全部,
我正在尝试修改 R 包 spatstat 中的 psp 对象的子集。这是给我一个问题的代码:
set.seed(10)
mat <- matrix(runif(40), ncol=4)
mx <- data.frame(v1=sample(1:4,10,TRUE),
v2=factor(sample(letters[1:4],10,TRUE),levels=letters[1:4]))
a <- as.psp(mat, window=owin(),marks=mx)
#subset to marking v1 = 2, modify one of its endpoints
a[a$marks$v1==2]$ends$x0<-rep(5,4)
这向我发出警告:
Warning message: In a[a$marks$v1 == 2]$ends$x0 <- rep(5, 4) : number of items to replace is not a multiple of replacement length
修改psp对象的某些元素的正确方法是什么?我通常将此操作与数据框一起使用,没有问题。我的感觉是子集运算符 ([) 没有为此操作设置 psp class.
感谢您的阅读;感谢您提供的任何帮助。
这里的问题是您正试图写入 psp
对象的一个子集。尽管为此 class 定义了 [
运算符,因此您可以 从中提取子集 ,但未定义 [<-
运算符,因此您可以't 覆盖一个子集。
但是,您试图覆盖的成员是一个数据框,它当然定义了一个 [<-
运算符。所以你需要做的就是写入它而不对实际的 psp
对象进行子集化。
这是一个完整的代表:
library(spatstat)
set.seed(10)
mat <- matrix(runif(40), ncol = 4)
mx <- data.frame(v1 = sample(1:4, 10, TRUE),
v2 = factor(sample(letters[1:4], 10, TRUE),
levels = letters[1:4]))
a <- as.psp(mat, window = owin(), marks = mx)
#subset to marking v1 = 2, modify one of its endpoints
a$ends$x0[a$marks$v1 == 2] <- rep(5, 4)
a
#> marked planar line segment pattern: 10 line segments
#> Mark variables: v1, v2
#> window: rectangle = [0, 1] x [0, 1] units
由 reprex package (v0.3.0)
于 2020-08-18 创建我将把它作为一个功能请求,为 [<-
添加一个方法 class psp
。
通常我们建议不要直接更改 spatstat
中对象的组件,因为这会破坏它们的内部一致性。所以 [<-
的方法将是最好的解决方案。