小编Gil*_*les的帖子

data.table:列名不能与j = c()和by一起使用

难以表达我的问题(因此难以在档案中有效搜索......).下面的代码应该清楚.

为什么在第二个命令中输出的最后一个列名不是"nb_ob"?c(lapply(.SD, mean), nb_obs = .N)应该提供一个带有4个元素的命名列表,这些元素应该成为最终结果中的一列.

奇怪c(lapply(.SD[,1:4], mean), nb_obs = .N)(第三个命令)提供了预期的结果.如果我删除by参数(最后一个命令),我也会获得预期的列名(带有字符列"Species"的警告).

对于Ubuntu 16.04.3 LTS,使用data.table_1.10.4,R版本3.4.1运行代码(如果需要,我可以提供更多)

iris <- data.table(iris)
iris[, c(lapply(.SD, mean), nb_obs = .N), by = Species] # 2nd command
#       Species Sepal.Length Sepal.Width Petal.Length Petal.Width  N
# 1:     setosa        5.006       3.428        1.462       0.246 50
# 2: versicolor        5.936       2.770        4.260       1.326 50
# 3:  virginica        6.588       2.974        5.552       2.026 50

iris[, c(lapply(.SD[,1:4], mean), nb_obs = .N), by = Species] # 3rd command
#       Species …
Run Code Online (Sandbox Code Playgroud)

r data.table

15
推荐指数
1
解决办法
616
查看次数

PROJ4 到 PROJ6 升级和“丢弃数据”警告

语境

我的问题与从 PROJ4 升级到 PROJ6 引起的变化以及各种 R 空间包 ( sp, sf, raster) 中的后果有关。

我们现在收到很多关于“废弃数据”的警告,看起来有点令人担忧,我有点困惑我应该怎么做。我可以看到这在某些情况下会产生可怕的后果,而在其他情况下可以忽略它们。

似乎我不是唯一一个有点迷茫的人(见这里)。我希望我提出的带有特定可重现示例的问题将有助于我们更好地理解该主题。

我知道我们可以删除警告,并且我已经阅读了上下文:r-spatial 博客文章迁移到 PROJ6/GDAL3这些研讨会笔记(mapview 在更新的版本中似乎以不同的方式处理此问题)

问题

问题 1:

可能是一个幼稚的问题:

我知道需要在 PROJ6 中实现新的符号/格式(WKT)(例如,因为需要更高的精度),但我不明白为什么需要从旧的 proj4 字符串中删除数据部分符号。为什么不保持原样(并以新的 WKT 格式/符号实现新功能)

问题2 :

似乎我们有 3 个关于旧 proj4 格式的数据丢失的案例:

  1. 没有警告:数据保持在旧的 proj4string 表示法中(sf默认?)
  2. 我们有一个警告“丢弃的数据 (...) 但 +towgs84= 保留了值”
  3. 我们有一个警告“Discarded datum (...)”(在这种情况下,字符串的“+towgs84=”部分被丢弃/丢弃 –>sp默认 ?? )

下面的例子说明了我们有这些警告的不同情况。

为什么我们在同一个 CRS 上有这 3 个不同的案例(这里是 EPSG 31370)?
删除基准和/或+towgs84零件的后果是什么?
我应该对第二个警告比第三个更不担心吗? …

r raster rgdal r-sp r-sf

13
推荐指数
1
解决办法
5455
查看次数

R S3 方法未从命名空间导出

为什么我有这个错误信息:

> vegan::reorder.hclust
Error: 'reorder.hclust' is not an exported object from 'namespace:vegan'
Run Code Online (Sandbox Code Playgroud)

虽然这种 S3 方法很好用。例如,如果我输入help(reorder.hclust, package = "vegan")我获取预期的帮助页面并vegan:::reorder.hclust在控制台上显示该函数的源代码......我的安装文件
也包含.NAMESPACEveganS3method(reorder, hclust)

我想在另一个包中使用这个函数,我需要导入它或使用 vegan::reorder.hclust

> sessionInfo()
R version 3.4.3 (2017-11-30)
Platform: x86_64-pc-linux-gnu (64-bit)
Running under: Ubuntu 16.04.4 LTS

Matrix products: default
BLAS: /usr/lib/libblas/libblas.so.3.6.0
LAPACK: /usr/lib/lapack/liblapack.so.3.6.0

locale:
 [1] LC_CTYPE=fr_BE.UTF-8       LC_NUMERIC=C               LC_TIME=fr_BE.UTF-8       
 [4] LC_COLLATE=fr_BE.UTF-8     LC_MONETARY=fr_BE.UTF-8    LC_MESSAGES=fr_BE.UTF-8   
 [7] LC_PAPER=fr_BE.UTF-8       LC_NAME=C                  LC_ADDRESS=C              
[10] LC_TELEPHONE=C             LC_MEASUREMENT=fr_BE.UTF-8 LC_IDENTIFICATION=C       

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

loaded via …
Run Code Online (Sandbox Code Playgroud)

namespaces r package vegan

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

dplyr::mutate 内带有基本 R 管道的“管道占位符的无效使用”

为什么这个带有基本 R 管道和占位符的命令dplyr::mutate会返回错误消息?

library(dplyr)
iris[,-5] |> mutate(Row_sum = apply(X = _, 1, function(x) sum(x)))

#> Error in mutate(iris[, -5], Row_sum = apply(X = "_", 1, function(x) sum(x))) : 
#> invalid use of pipe placeholder
Run Code Online (Sandbox Code Playgroud)

在 mutate 之外工作正常:

iris[,-5] |> apply(X = _, 1, function(x) sum(x))

#>   [1] 10.2  9.5  9.4  9.4 10.2 11.4  9.7 10.1  8.9  9.6 10.8 10.0  9.3  8.5 11.2
#>  [16] 12.0 11.0 10.3 11.5 10.7 10.7 10.7  9.4 10.6 10.3  9.8 10.4 10.4 10.2 …
Run Code Online (Sandbox Code Playgroud)

r dplyr

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

像`sp @ data`这样,从`sf`对象中提取没有几何形状的数据

可能是一个非常基本的问题,但是我在Simple Features R包的文档中没有找到任何内容。

我正在寻找一种本机sf函数,可以动态提取一个无几何形状的sf对象的所有列。就像SP@data使用sp对象。

以下函数可以完成这项工作,但我希望使用本机函数:

st_data <- function(SF) { SF[, colnames(SF) != attr(SF, "sf_column"), drop = TRUE]}
Run Code Online (Sandbox Code Playgroud)

一种典型的用法是当我想按属性合并两个SF数据集(merge不适用于两个sf对象)时:merge(SF1, st_data(SF2))

在那种情况下,使用它是不切实际的,st_geometry(SF2) <- NULL因为它不能“即时”运行,并且我也不想永久删除几何列,并且SF2[,1:5,drop=T]也不切实际,因为我必须查看对象以查看几何列在哪里。

使用:sf_0.5-4-R 3.4.1

r r-sp r-sf

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

没有正确处理管道内部的pander mardown表

我使用pander R包生成markdown表,这些表包含一些列标题中的管道(例如:P> | t |).看起来(除非我遗漏了一些东西)由于柱分隔符和"真实"管道之间的混淆,它们既没有被pandoc也没有被Rmarkdown正确处理.

考虑以下Rmd示例:

```{r  message = FALSE}
library(pander)
panderOptions("table.style" , "rmarkdown")
panderOptions("table.split.table" , Inf) # avoid to split the tables

data(iris)
mod <- lm(Sepal.Length ~ Species, data = iris)
```

```{r results='asis'}
pandoc.table(summary(mod)$coefficients[,-4])
```

```{r results='asis'}
pandoc.table(summary(mod)$coefficients)
```
Run Code Online (Sandbox Code Playgroud)

pander生成的最后一个表看起来像这样(注意最后一列名称中的管道):

|                  &nbsp; |  Estimate  |  Std. Error  |  t value  |  Pr(>|t|)  |
|------------------------:|:----------:|:------------:|:---------:|:----------:|
|         **(Intercept)** |   5.006    |    0.0728    |   68.76   | 1.134e-113 |
|   **Speciesversicolor** |    0.93    |    0.103     |   9.033   |  8.77e-16  |
|    **Speciesvirginica** …
Run Code Online (Sandbox Code Playgroud)

r pandoc knitr r-markdown pander

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

R:绘制套索β系数

我用R编写了这个套索代码,并得到了一些beta值:

#Lasso
library(MASS)
library(glmnet)
Boston=na.omit(Boston)
x=model.matrix(crim~.,Boston)[,-1]
rownames(x)=c()
y=as.matrix(Boston$crim)
lasso.mod =glmnet(x,y, alpha =1, lambda = 0.1)
beta=as.matrix(rep(0,19))
beta=coef(lasso.mod)
matplot(beta,type="l",lty=1,xlab="L1",ylab="beta",main="lasso")
Run Code Online (Sandbox Code Playgroud)

我想在这样的图中绘制Beta:

在此处输入图片说明

但是我不知道RI中有什么绘图功能可以用来做到这一点。

regression r machine-learning lasso-regression glmnet

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