我正在尝试使用栅格包中的“级别”功能为一堆栅格生成属性表。我将所有栅格都放在一个列表中,并将相应的属性表作为数据框放在一个单独的列表中。我找不到一个方法来获取列表中的第一个栅格,给它dfs列表中第一个df的属性。
require(raster)
## Generate test rasters with values
rast1<-raster(ncol=10, nrow=10, xmn=0, xmx=10, ymn=0, ymx=10)
values(rast1)<-round(runif(100,1,4))
rast2<-raster(ncol=11, nrow=10, xmn=0, xmx=10, ymn=0, ymx=10)
values(rast2)<-round(runif(110,1,4))
testrastlist<-list(rast1, rast2)
## Generate test data frames for attribute tables
df1<-data.frame('ID'=c(1,2,3,4),'a'=c(1,2,3,4), 'b'=c(1,2,3,4), 'c'=c(1,2,3,4))
df2<- data.frame('ID'=c(1,2,3,4),'d'=c(5,6,7,8),'e'=c(5,6,7,8),'f'=c(5,6,7,8))
testdflist<-list(df1,df2)
我尝试过以下方法:不起作用,
levels(testrastlist)<-testdflist
虽然这适用于单个栅格和单个数据帧:
#This works
levels(rast1)<-df1
# As does this
levels(testrastlist[[1]]<-testdflist[[1]]
我希望apply
解决方案(如果有),但我无法让lapply
或Map()
工作,或者我没有运气使用for循环无论是。
我认为解决方案的结构是这样的:(直接来自applying a function on two lists)但我不确定如何为我的目的重组它。有什么建议吗?
mapply(function(X,Y) {
lapply(1:10, function(row) cor(X[row,], Y[row,]))
}, X=listA, Y=listB)