小编Her*_*rot的帖子

下标超出gbm函数的范围

我有一个奇怪的问题.我已经在我的笔记本电脑上成功运行了这个代码,但是当我尝试在另一台机器上运行它时,我得到了这个警告分布没有指定,假设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)

r gbm

11
推荐指数
1
解决办法
1万
查看次数

根据图层部分名称匹配选择堆栈中的栅格

我有一堆栅格(每个物种一个),然后我有一个数据框,其中包含纬度/长列以及物种名称.

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]]轻松选择单个栅格,但不能保证列表中的每个物种都有其等效的栅格.

string stack select r raster

7
推荐指数
1
解决办法
2007
查看次数

.RDataTmp临时文件的目的?[R]

在保存工作空间的每个目录中创建的R临时文件的用途是什么?它包含哪些数据并且删除是否安全?

r

7
推荐指数
1
解决办法
2617
查看次数

数组构造函数中不同的CHARACTER长度(3/4),如何修剪字符串-fortran

根据对类似问题的回答,我已声明字符,如此处所示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)

fortran gfortran fortran90

5
推荐指数
1
解决办法
2430
查看次数

检查库版本netcdf linux

如何确定我的系统中安装了哪个版本的netcdf库?有命令行吗?我试图搜索"netcdf",我找到了一堆文件,但我无法确定版本号.是否有命令检查安装的任何版本?

我在ubuntu上

linux ubuntu netcdf

5
推荐指数
1
解决办法
8409
查看次数

索引Fortran数组的多个非相邻元素

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)

fortran

4
推荐指数
1
解决办法
451
查看次数

如何跨子例程处理模块中的 Fortran 全局可分配变量

我有以下模块,其中包含一个可分配变量,该变量在模块中定义,在子例程中分配,然后也在第一个子例程调用的第二个子例程中使用。在这种情况下,我是否必须将变量传递给第二个子例程并声明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)

fortran module global-variables allocatable-array

3
推荐指数
1
解决办法
1055
查看次数

scale_fill_stepsn 中的 Ggplot 中心色标为零

工作数据

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但我对色阶没有太多控制。

r ggplot2 colorbar

3
推荐指数
1
解决办法
2455
查看次数

如何将堆栈中的栅格图层组合成数据框 R

我有一个由光栅组成的堆栈

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)

一切正常。但是我必须提取许多栅格并将它们组合在一个数据框中。我现在看到的唯一解决方案是单独提取它们然后组合它们,有没有更好的解决方案?我一次处理数百个栅格。

编辑:我还应该补充一点,这个函数进入一个循环,我只是在每个循环中提取栅格的一个子集。

stack r dataframe

2
推荐指数
1
解决办法
4707
查看次数

函数“extract”如何处理不同的投影?

我需要使用函数extract() 使用大小相等的正方形网格单元从栅格中进行加权平均提取。我的多边形网格在 UTM21n 中,而栅格在 GCS WGS84 基准面 D 中。在将栅格使用到 extract() 中之前,我是否必须重新投影栅格?或者函数会正确处理它吗?

r extract raster map-projections

2
推荐指数
1
解决办法
756
查看次数

显示总行数状态栏的崇高文字3

在Sublime Text 3的状态栏中,是否有代码可以放入设置或插件中,以显示沿当前行和列的总行数?

sublimetext3 sublime-text-plugin

2
推荐指数
1
解决办法
3004
查看次数

r - 光栅包内存使用效率低下或 r 对某些光栅操作的限制?

这基本上是在这个问题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 的限制?

r r-raster

0
推荐指数
1
解决办法
1078
查看次数