小编Ric*_*loo的帖子

R - 将SpatialLines转换为栅格

在R中,我们可以将a raster转换为SpatialLinesDataFrame具有以下功能rasterToCountour:

library(raster)
f <- system.file("external/test.grd", package="raster")
r <- raster(f)
x <- rasterToContour(r)
class(x)

[1] "SpatialLinesDataFrame"
attr(,"package")
[1] "sp"

spplot(x)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

在R中,有没有办法做相反的事情?有点像contourToRaster

我们可以简单地获取与沿着线的每个点相关联的字段值,但是我正在寻找在线之间插值并在定义的域上产生完整栅格的更通用的东西.

r raster r-raster r-sp

16
推荐指数
1
解决办法
552
查看次数

获得随机森林中单个树木的重要性

问题:是否可以从randomForest对象中提取每个CART模型的变量重要性?

rf_mod$forest似乎没有此信息,文档也没有提及。


在R的randomForest程序包中,整个CART模型林的平均变量重要性由给出importance(rf_mod)

library(randomForest)

df <- mtcars

set.seed(1)
rf_mod = randomForest(mpg ~ ., 
                      data = df, 
                      importance = TRUE, 
                      ntree = 200)

importance(rf_mod)

       %IncMSE IncNodePurity
cyl  6.0927875     111.65028
disp 8.7730959     261.06991
hp   7.8329831     212.74916
drat 2.9529334      79.01387
wt   7.9015687     246.32633
qsec 0.7741212      26.30662
vs   1.6908975      31.95701
am   2.5298261      13.33669
gear 1.5512788      17.77610
carb 3.2346351      35.69909
Run Code Online (Sandbox Code Playgroud)

我们还可以使用提取单个树结构getTree。这是第一棵树。

head(getTree(rf_mod, k = 1, labelVar = TRUE))
  left daughter right daughter split var …
Run Code Online (Sandbox Code Playgroud)

r machine-learning random-forest

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

ggplot2脚注

在使用ggplot2创建的绘图底部添加脚注的最佳方法是什么?我尝试过使用这里提到的逻辑组合http://www.r-bloggers.com/r-good-practice-%E2%80%93-adding-footnotes-to-graphics/以及ggplot2注释功能

p + annotate("text",label="Footnote",
  x=unit(1,"npc") - unit(2, "mm"),y=unit(2, "mm"),
  just=c("right", "bottom"),gp=gpar(cex= 0.7, col=grey(.5)))
Run Code Online (Sandbox Code Playgroud)

但是我收到错误"as.data.frame.default(x [[i]]中的错误,可选= TRUE,stringsAsFactors = stringsAsFactors):不能将类c("unit.arithmetic","unit")强制转换为data.frame".

pdf r ggplot2

11
推荐指数
2
解决办法
5716
查看次数

ggplot:删除图例中的NA因子级别

这是一个密谋问题.

在nycflights13数据库中,我创建了一个名为tot_delay的新连续变量,然后创建了一个名为delay_class的4个级别的因子.当我绘制时,我会过滤掉NA值,但它们仍会出现在图例中.

Pesky NA传奇价值.....

如何轻松省略图例中的NA值?这是我的代码:

library(nycflights13); library(ggplot2)

flights$tot_delay = flights$dep_delay + flights$arr_delay
flights$delay_class <- cut(flights$tot_delay,                                   
                           c(min(flights$tot_delay, na.rm = TRUE), 0, 20 , 120,
                             max(flights$tot_delay, na.rm = TRUE)),   
                           labels = c("none", "short","medium","long"))     

filter(flights, !is.na(tot_delay)) %>% 
  ggplot() +
  geom_bar(mapping = aes(x = carrier, fill = delay_class), position = "fill")
Run Code Online (Sandbox Code Playgroud)

r ggplot2

10
推荐指数
2
解决办法
8883
查看次数

计算和绘制任意 rasterLayer 的矢量场

问题陈述:

随着ggquiver::geom_quiver()我们就可以绘制矢量场,只要我们知道xyxend,和yend

  1. 如何计算任意RasterLayer海拔的这些参数?
  2. 我如何确保这些箭头的大小表示该特定向量的斜率,以便箭头显示的长度与该位置的梯度成正比(例如,下面的第一个图)?

背景:

# ggquiver example

library(tidyverse)
library(ggquiver)
expand.grid(x=seq(0,pi,pi/12), y=seq(0,pi,pi/12)) %>%
  ggplot(aes(x=x,y=y,u=cos(x),v=sin(y))) +
  geom_quiver()
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

一个相关的方法使用rasterVis::vectorplot,它依赖于raster::terrain(提供场单位 == CRS 单位)来计算和绘制矢量场。源代码在这里

library(raster)
library(rasterVis)
r <- getData('alt', country='FRA', mask=TRUE)
r <- aggregate(r, 20)
vectorplot(r, par.settings=RdBuTheme())
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明


结论:

到的综述,我想采取任意的rasterLayer海拔,将其转换为一个data.frame,计算xyxmax,和ymax的正视矢量场的组件尺寸的箭头,使得它们显示出在该点的相对倾斜(如在图1和 2 以上),并用ggquiver. 就像是:

names(r) <- "z"
rd <- as.data.frame(r, xy=TRUE)

# calculate x, …
Run Code Online (Sandbox Code Playgroud)

r geospatial ggplot2 r-raster

8
推荐指数
1
解决办法
604
查看次数

在R中将DataFrame转换为邻接/权重矩阵

我有一个DataFrame , df.

n是一列,表示列中的组数x.
x是包含逗号分隔组的列.

df <- data.frame(n = c(2, 3, 2, 2), 
                 x = c("a, b", "a, c, d", "c, d", "d, b"))

> df
n        x
2     a, b
3  a, c, d
2     c, d
2     d, b
Run Code Online (Sandbox Code Playgroud)

我想将此DataFrame转换为权重矩阵,其中行和列名称是组中的唯一值,df$x元素表示每个组一起出现的次数df$x.

输出应如下所示:

m <- matrix(c(0, 1, 1, 1, 1, 0, 0, 1, 1, 0, 0, 2, 1, 1, 2, 0), nrow = 4, ncol = 4)
rownames(m) <- letters[1:4]; colnames(m) …
Run Code Online (Sandbox Code Playgroud)

r matrix adjacency-matrix

7
推荐指数
2
解决办法
214
查看次数

为 13K pdf 文档运行 for 循环时出现空间不足错误

我正在为 13K pdf 文件做 for 循环,在其中读取、预处理文本、查找相似性并写入 txt。但是,当我运行 for 循环时,它给出了一个错误

Error in poppler_pdf_text(loadfile(pdf), opw, upw) : Not enough space

原因是什么?

  1. 我试了加memory_limit(),也不是这个问题。
  2. 我试图删除文件夹中的隐藏文件,例如Thumbs.db,但同样的问题再次出现。
  3. 我在每次迭代时删除 pdf 文件。

folder_path <- "C: ...."
## get vector with all pdf names
pdf_folder <- list.files(folder.path)

## for loop over all pdf documents
for(s in 1:length(pdf_folder)){

   ## choose one pdf document from vector of strings
   pdf_document_name <- pdf_folder[s]

   ## read pdf_document pdf into data.frame
   pdf <- read_pdf(paste0(folder_path,"/",pdf_document_name))

   print(s)

   rm(pdf)

} ## end of for …
Run Code Online (Sandbox Code Playgroud)

r batch-processing

6
推荐指数
1
解决办法
623
查看次数

R 中并排的 2 个光栅图像的传单

{leaflet.extras2}实现传单并排插件并提供这个最小的示例:

library(leaflet)
library(leaflet.extras2)

leaflet(quakes) %>%
  addMapPane("left", zIndex = 0) %>%
  addMapPane("right", zIndex = 0) %>%
  addTiles(group = "base", layerId = "baseid",
           options = pathOptions(pane = "right")) %>%
  addProviderTiles(providers$CartoDB.DarkMatter, group="carto", layerId = "cartoid",
                   options = pathOptions(pane = "left")) %>%
  addCircleMarkers(data = breweries91[1:15,], color = "blue", group = "blue",
                   options = pathOptions(pane = "left")) %>%
  addCircleMarkers(data = breweries91[15:20,], color = "yellow", group = "yellow") %>%
  addCircleMarkers(data = breweries91[15:30,], color = "red", group = "red",
                   options = pathOptions(pane = "right")) …
Run Code Online (Sandbox Code Playgroud)

r leaflet r-raster r-leaflet

6
推荐指数
1
解决办法
1134
查看次数

在循环中的Plotly中的add_trace

我想在一个循环中绘制多个迹线而不会覆盖所有先前的迹线。

在2015 年的这篇文章中,提出了通过evaluate = TRUE在plot_ly或add_trace函数中进行设置来在循环中添加跟踪的解决方案。但是,截至2017年,在较新版本的plot_ly中,evaluate它不是属性。

'scatter3d' objects don't have these attributes: 'evaluate'
Run Code Online (Sandbox Code Playgroud)

这个问题这个问题也未能回答问题。这篇文章承认valuate = TRUE不适用于新的plotly,但没有给出解决方案。这个问题的新解决方案是什么?


我的复制/粘贴数据:

structure(list(x_1 = c(74.651438, 75.31493, 76.736865, 77.858125, 
79.347856, 80.302483), y_1 = c(249.063605, 247.149121, 245.461889, 
243.811041, 242.382685, 240.300034), z_1 = c(4.373868, 3.653744, 
4.101455, 4.134471, 4.225507, 4.890157), x_2 = c(85.468712, 86.637469, 
87.993127, 87.907308, 88.748766, 89.680155), y_2 = c(249.063405, 
247.145423, 245.46148, 244.949469, 244.005001, 242.917665), z_2 = c(4.56633, 
4.059976, 3.842906, 4.019021, 4.316799, 4.378894), x_3 = c(101.720648, 
101.70598, …
Run Code Online (Sandbox Code Playgroud)

r plotly scatter3d

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

单击传单标记将您带到URL

在R的宣传资料包中,是否可以点击标记并定向到URL?*

JS中这似乎是可能的。


添加带有URL的独立弹出窗口很容易:

library(leaflet)
content <- paste(sep = "<br/>",
                 "<b><a href='http://www.samurainoodle.com'>Samurai Noodle</a></b>"
)

leaflet() %>% addTiles() %>%
  addPopups(-122.327298, 47.597131,  content,
             options = popupOptions(closeButton = FALSE)
  )
Run Code Online (Sandbox Code Playgroud)

添加标记时也很简单,当单击该标记时,将在弹出窗口中提供一个URL:

leaflet() %>% addTiles() %>%
  addMarkers(-122.327298, 47.597131, popup =  content,
            options = popupOptions(closeButton = FALSE)
  )
Run Code Online (Sandbox Code Playgroud)

也许有一些习惯传递给传单了...吗?


最后,自定义JS函数如何为每个地图标记显示不同的URL?考虑示例data.frame:

df <- data.frame(url = c("/sf/ask/tagged/python/",
                         "/sf/ask/tagged/r/")),
                 lng = c(-122.327298, -122.337298),
                 lat = c(47.597131,47.587131))
Run Code Online (Sandbox Code Playgroud)

* 之前曾有人问过这个问题,但我在这里再问一个问题,并举一个最小的,可复制的例子。

javascript r leaflet htmlwidgets htmltools

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