我有一个奇怪的问题.我已经在我的笔记本电脑上成功运行了这个代码,但是当我尝试在另一台机器上运行它时,我得到了这个警告分布没有指定,假设bernoulli ...,我希望但是我得到这个错误:
Error in object$var.levels[[i]] : subscript out of bounds
library(gbm)
gbm.tmp <- gbm(subxy$presence ~ btyme + stsmi + styma + bathy,
data=subxy,
var.monotone=rep(0, length= 4), n.trees=2000, interaction.depth=3,
n.minobsinnode=10, shrinkage=0.01, bag.fraction=0.5, train.fraction=1,
verbose=F, cv.folds=10)
Run Code Online (Sandbox Code Playgroud)
有人可以帮忙吗?数据结构完全相同,相同的代码,相同的R.我甚至不在这里使用下标.
编辑:traceback()
6: predict.gbm(model, newdata = my.data, n.trees = best.iter.cv)
5: predict(model, newdata = my.data, n.trees = best.iter.cv)
4: predict(model, newdata = my.data, n.trees = best.iter.cv)
3: gbmCrossValPredictions(cv.models, cv.folds, cv.group, best.iter.cv,
distribution, data[i.train, ], y)
2: gbmCrossVal(cv.folds, nTrain, n.cores, class.stratify.cv, data,
x, y, offset, distribution, w, …Run Code Online (Sandbox Code Playgroud) 我有一堆栅格(每个物种一个),然后我有一个数据框,其中包含纬度/长列以及物种名称.
fls = list.files(pattern="median")
s <- stack(fls)
df<-c("x","y","species name")
Run Code Online (Sandbox Code Playgroud)
我希望能够一次只选择一个栅格以使用提取功能.我希望选择基于物种名称列的部分匹配.我想这样做是因为栅格名称可能与物种列表中的名称不完全匹配,可能存在大写不匹配或栅格图层名称可能更长,例如"species_name_median",或者可能还有" _"而不是空白.
for(i:length(df.species name))
{
result<-extract(s[[partial match to "species name[i]" ]],df.xy)
}
Run Code Online (Sandbox Code Playgroud)
我希望这是有意义的,我只想一次使用一个栅格进行提取.我可以使用s [[i]]轻松选择单个栅格,但不能保证列表中的每个物种都有其等效的栅格.
根据对类似问题的回答,我已声明字符,如此处所示gfortran不允许使用长度可变的字符数组。但是,我想使用trim函数,因为我需要添加空格来手动填充名称,然后在代码的另一部分中使用这些变量。我可以在创建阵列的同时修剪吗?
错误:数组构造函数的(1)处的CHARACTER长度(3/4)不同
如果我添加随机字符以使其具有相同的长度,则可以使用,但是出于明显的原因,我不能这样做。我已经用gfortran和mpif90编译了相同的结果
use mod_maxdims , only : maxstr
integer, parameter :: nvars_ncep = 12
character(len=maxstr), parameter, dimension(nvars_ncep) :: vars_ncep = &
(/ 'air' & ! Air temperature [ K]
, 'pres' & ! Pressure [ Pa]
, 'rhum' & ! Relative humidity [ %]
, 'uwnd' & ! Zonal wind [ m/s]
, 'vwnd' & ! Zonal wind [ m/s]
, 'pres' & ! Pressure [ Pa]
, 'dlwrf' & ! Downward long wave radiation [ W/m2] …Run Code Online (Sandbox Code Playgroud) 如何确定我的系统中安装了哪个版本的netcdf库?有命令行吗?我试图搜索"netcdf",我找到了一堆文件,但我无法确定版本号.是否有命令检查安装的任何版本?
我在ubuntu上
Fortran中有没有办法在不使用循环的情况下访问数组的许多元素?
例如给定100个元素的数组
real(100) :: a
Run Code Online (Sandbox Code Playgroud)
我可以做这样的事情来访问不遵循常规步骤的元素1,4,7,54,81吗?
a(1,4,7,54,81)= 3.21423
Run Code Online (Sandbox Code Playgroud) 我有以下模块,其中包含一个可分配变量,该变量在模块中定义,在子例程中分配,然后也在第一个子例程调用的第二个子例程中使用。在这种情况下,我是否必须将变量传递给第二个子例程并声明INTENT(inout)?或者因为它是一个全局变量,所以不需要作为参数传递?
MODULE test
IMPLICIT NONE
SAVE
REAL,ALLOCATABLE,DIMENSION(:,:,:) :: total
CONTAINS
!--- 1st subroutine
SUBROUTINE my_subr1(n,m,z)
IMPLICIT NONE
INTEGER,INTENT(in) :: n,m,z
ALLOCATE(total (n,m,z))
total=.9
CALL my_subr2(n)
END SUBROUTINE my_subr1
!-- 2nd subroutine
SUBROUTINE my_subr2(n)
IMPLICIT NONE
INTEGER,INTENT(in) :: n
total(n,:,:)=total(n-1,:,:)
END SUBROUTINE my_subr2
END MODULE test
Run Code Online (Sandbox Code Playgroud) 工作数据
m=raster(ncol=10,nrow=10)
m[,]=runif(100, -0.8, 0.5)
tmp=data.table(as.data.frame(m,xy=TRUE))
ggplot()+ geom_tile(data = tmp, aes(x = x, y = y ,fill=layer)) +
scale_fill_stepsn(colors=c('#b2182b','#ef8a62','#fddbc7','#f7f7f7','#d1e5f0','#67a9cf','#2166ac'),n.breaks=10)
Run Code Online (Sandbox Code Playgroud)
我试图绘制多个数字,显示 -1 和 +1 之间的数据,但是大多数数字的数据并不以零为中心,因为正数或负数数据的范围较大。在图中,我希望正值以蓝色显示,正值以红色显示,并将分箱控制在 0.1 或 0.2 之间。
如何以编程方式强制色标以scale_fill_stepsn零为中心,而不必一直摆弄中断?我尝试过n.breaks并尝试过,scale_fill_steps2但我对色阶没有太多控制。
我有一个由光栅组成的堆栈
s<-stack(list of ASCI files)
Run Code Online (Sandbox Code Playgroud)
我正在尝试执行此操作
df<-as.data.frame(c(s[[1]],s[[2]],s[[2]],s[["bathymetry"]]))
Run Code Online (Sandbox Code Playgroud)
但我收到这个错误
Error in as.data.frame.default(x[[i]], optional = TRUE) :
cannot coerce class "structure("RasterLayer", package = "raster")" to a data.frame
Run Code Online (Sandbox Code Playgroud)
当我在单个栅格上执行此操作时,例如
df<-as.data.frame(s[[1]])
Run Code Online (Sandbox Code Playgroud)
一切正常。但是我必须提取许多栅格并将它们组合在一个数据框中。我现在看到的唯一解决方案是单独提取它们然后组合它们,有没有更好的解决方案?我一次处理数百个栅格。
编辑:我还应该补充一点,这个函数进入一个循环,我只是在每个循环中提取栅格的一个子集。
我需要使用函数extract() 使用大小相等的正方形网格单元从栅格中进行加权平均提取。我的多边形网格在 UTM21n 中,而栅格在 GCS WGS84 基准面 D 中。在将栅格使用到 extract() 中之前,我是否必须重新投影栅格?或者函数会正确处理它吗?
在Sublime Text 3的状态栏中,是否有代码可以放入设置或插件中,以显示沿当前行和列的总行数?
这基本上是在这个问题https://gis.stackexchange.com/questions/95481/in-r-set-na-cells-in-one-raster-where-another-raster-has-values和此处为大栅格图层中的 R-Chaging 特定像元值。第一个问题的答案没有解决我的问题,因为我没有另一个可以与overlay或 一起使用的对象calc。重新分类是唯一有效的方法。
就我而言,我有一个 300 MB 的光栅文件。我正在应用一个简单的操作,只是尝试用 NA 替换栅格中等于某个数字的所有值。我有大约 4 GB 的可用 RAM,但似乎我无法完成此操作,因为我收到错误消息“无法分配大小为 4.6 GB 的向量”。我什至尝试将我的内存大小设置为 16 GB,但是我得到了同样的错误,只是说无法分配大小为 9.2 GB 的向量。我尝试了以下两个选项:
r[r==5]=NA
values(r)[values(r)==5]
Run Code Online (Sandbox Code Playgroud)
奇怪的是,即使是像 table(values(r)) 这样的简单操作也会出现同样的错误,例如 ArcMap 可以在几秒钟内创建这个表。我已经解决了我的问题,但我想知道为什么内存使用效率如此低下,以及如何防止或避免它?为什么raster需要多达 9 GB 来处理 300 MB 的文件?这是这个包的限制还是 R 的限制?