Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 轻松分配和使用Spatial*数据帧的数据值_R_Spatial_Gstat_Spatial Data Frame - Fatal编程技术网

R 轻松分配和使用Spatial*数据帧的数据值

R 轻松分配和使用Spatial*数据帧的数据值,r,spatial,gstat,spatial-data-frame,R,Spatial,Gstat,Spatial Data Frame,是否可以以某种方式轻松处理空间*数据框中的数据(*=点、线、多边形、像素、网格等)?特别是,我在给它赋值和使用它们时遇到困难: require(gstat) data(meuse) coordinates(meuse) = ~x+y data(meuse.grid) gridded(meuse.grid) = ~x+y ######## 1) assigning value meuse[1,'zinc'] <- NA # Error in meuse[1, "zinc"] <-

是否可以以某种方式轻松处理
空间*数据框中的数据(*=点、线、多边形、像素、网格等)?特别是,我在给它赋值和使用它们时遇到困难:

require(gstat)
data(meuse)
coordinates(meuse) = ~x+y
data(meuse.grid)
gridded(meuse.grid) = ~x+y

######## 1) assigning value

meuse[1,'zinc'] <- NA
# Error in meuse[1, "zinc"] <- NA : object of type 'S4' is not subsettable
as.data.frame(meuse)[1,'zinc'] <- NA
# Error in as.data.frame(meuse)[1, "zinc"] <- NA : 
#   could not find function "as.data.frame<-"

######## 2) operating with values

meuse[, 'zinc'] + 2
# Error in meuse[, "zinc"] + 2 : non-numeric argument to binary operator
require(gstat)
数据(meuse)
坐标(meuse)=~x+y
数据(meuse.grid)
网格化(meuse.grid)=~x+y
########1)赋值

meuse[1,'zing']对于Spatial*DataFrame对象,您可以使用'@data'访问data.frame插槽,并且通常的data.frame操作应该可以工作。以你为例,

 meuse@data[1, 'zinc'] <- NA

您可以这样做:

meuse$zinc[1] <- NA 

如果可以的话,最好避免使用@operator,因为开发人员可以隐藏在他们提供给用户的代码中,也就是说,如果不使用提供的方法,它会破坏他们的API。它没有什么大的危险,除了开发人员可能会更改API,而您的代码将无法工作,并且您可能会通过修改对象的设计方式中的一个部分而不是另一个部分来损坏对象,因此您不应该使用它,除非是私下使用或在您积极维护的代码中使用(我认为在这种情况下是安全的,但如果可以的话,一般避免使用)。请参阅“@”和“slot”了解基本信息。

meuse$ZINK[1]这也很有效,因此您可以避免使用$:meuse[['ZINK']][1]@mdsumner,哇,这么多的可能性!但是你怎么说
@
操作符,我为什么要避免它呢?这不仅有趣,而且似乎很重要;请将它作为你自己的答案发布!这是因为开发人员隐藏在他们提供给用户的代码中,也就是说,如果你不使用提供的方法,它会破坏API。这没有什么危险,只是开发人员可能会更改API,而您的代码将无法工作(我认为在这种情况下是安全的,但如果可以的话,一般避免使用它。Spatial*类应该在这里提供更多帮助,这可能是因为DataFrame部分最初是单独实现的,在扩展R中的实际data.frame之前,我想是很长的一段时间)。谢谢!1)因此,您认为这3条语句不起作用是一个缺陷?有人能修复它吗?2)是否在某处记录了
Spatial*DataFrame
@data
功能?人们可以将此作为使用它是否合理的标准。似乎他们也使用了
df[['zine']][1]
。我不喜欢这些更“正确”的方式,因为这不是我通常使用data.frames的方式。
df@data[1,'锌']
与我通常使用的非常接近。更重要的是,使用
@data
可以将其作为一个数据框架使用—按名称或索引索引多个列:
meuse@data[,c('zing','cd')]
不幸的是,在
meuse[[]]
表单中,这项功能不起作用。现在,meuse[1,'zing']
 str(meuse@data)
'data.frame':   155 obs. of  12 variables:
 $ cadmium: num  11.7 8.6 6.5 2.6 2.8 3 3.2 2.8 2.4 1.6 ...
 $ copper : num  85 81 68 81 48 61 31 29 37 24 ...
 $ lead   : num  299 277 199 116 117 137 132 150 133 80 ...
 $ zinc   : num  NA 1141 640 257 269 ...
 ...
meuse$zinc[1] <- NA 
aname <- 'zinc'
meuse[[aname]][1] <- NA
meuse[1,'zinc'] <- NA
meuse[1,][['zinc']] <- NA
meuse[1,]$zinc <- NA