小编Chr*_*ris的帖子

是否可以更新传单中的多边形填充以获得闪亮而无需重新创建地图对象

在传单中,我通常会创建一个地图:

server.R

shinyServer(function(input, output, session) {
url <- "custommapboxurl"
attrib <- "Maps by http://www.mapbox.com/Mapbox"

...
     map_out <- reactive({

        map <- leaflet()%>%
        addTiles(urlTemplate = url, attribution = HTML(attrib))%>%
        addPolygons(data = sub_shape,
                    fill = TRUE,
                    fillColor = colors$color,
                    fillOpacity = .8,
                    stroke = TRUE,
                    weight = 3,
                    color = "white",
                    dashArray = c(5,5),
                    popup = pops
        )
    })

    output$myMap <- renderLeaflet({
            map_out()
    })
...
})
Run Code Online (Sandbox Code Playgroud)

sub_shape上面是我的shapefile(在本例中是美国的邮政编码),颜色$ color是与每个形状对应的颜色的动态矢量.您可以使用以下链接重新创建:http://www.nws.noaa.gov/geodata/catalog/national/html/province.htm,colors <- data.frame(color = colorRampPalette(c("white","blue"))(13))

ui.R

shinyUI(
    ...
    leafletOutput('myMap', width …
Run Code Online (Sandbox Code Playgroud)

r leaflet shiny

14
推荐指数
1
解决办法
3460
查看次数

多个ggplot2图与情节

我想使用ggplot2和grid.arrange一起用plotly生成多个图.有点像这样:

library(ggplot2)
library(gridExtra)
library(plotly)


g1<-ggplot(mpg, aes(displ, hwy, color=factor(year)))+geom_point()

g2<-ggplot(mpg, aes(cyl, hwy, color=factor(year)))+geom_point()

g<-grid.arrange(g1,g2,ncol=2)

ggplotly(g)
Run Code Online (Sandbox Code Playgroud)

但是,我得到了"gg2list中的错误(p):剧情中没有图层"

有什么建议

r ggplot2 plotly

13
推荐指数
2
解决办法
5345
查看次数

如何使用libssl和libpg以及SSL激活来编译RpostgreSQL

我在Windows上使用R连接到AWS上托管的PostgreSQL数据库.使用forcessl = 1设置数据库 - 这意味着需要使用sslmode = require设置任何连接.

基础RPostgreSQL包不提供任何ssl选项的暴露.这已成为一个问题多次(见这里,这里,这里这里)

我知道有使用该RPostgres软件包的解决方法,但出于其他功能原因,我更喜欢使用该RPostgreSQL软件包.

一些答案(例如这里)建议使用修改后的dbname连接ssl,如下所示:

dbConnect(dbDriver('PostgreSQL'),
    dbname   = 'dbname=foobar sslmode=require', # modified dbname
    host     = 'foobar.rds.amazonaws.com',
    port     = 5439,
    user     = 'foobar',
    password = 'foobar')
Run Code Online (Sandbox Code Playgroud)

但这对我来说不适用于使用CRAN版本的软件包.这导致我最近在RPostgreSQL github上提出了一个问题:https://github.com/tomoakin/RPostgreSQL/issues/88

初始用户在从源代码编译包时能够使用修改后的dbname方法.在Windows上,使用使用RTools编译的最新源包(0.6.2),运行修改后的dbname代码时出现以下错误:

Error in postgresqlNewConnection(drv, ...) : 
  RS-DBI driver: (could not connect xxxxx.rds.amazonawss.com:5432 on dbname "xxxxxxx": sslmode value "require" invalid when SSL support is not compiled in
)
Run Code Online (Sandbox Code Playgroud)

从这个和线程的其余部分看,在Windows和Mac中看起来无法从当前源获得SSL.但是,开发人员建议:

如果在libssl和libpq成为SSL激活形式的环境中编译,则驱动程序可以使用SSL. …

openssl r rpostgresql

9
推荐指数
1
解决办法
867
查看次数

测试两列字符串,以便在R中按行进行匹配

假设我有两列字符串:

library(data.table)
DT <- data.table(x = c("a","aa","bb"), y = c("b","a","bbb"))
Run Code Online (Sandbox Code Playgroud)

对于每一行,我想知道x中的字符串是否存在于y列中.循环方法是:

for (i in 1:length(DT$x)){
  DT$test[i] <- DT[i,grepl(x,y) + 0]
}

DT
    x   y test
1:  a   b    0
2: aa   a    0
3: bb bbb    1
Run Code Online (Sandbox Code Playgroud)

这是否有矢量化的实现?使用grep(DT$x,DT$y)仅使用x的第一个元素.

regex r data.table

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

在 R 中创建相等总和的组

我试图将我的 data.frame/data.table 的一列分成三组,所有组的总和相等。

数据首先从最小到最大排序,这样第一组将由大量具有小值的行组成,而第三组将由少量具有大值的行组成。这是在精神上完成的:

test <- data.frame(x = as.numeric(1:100000))
store <- 0
total <- sum(test$x)

for(i in 1:100000){

  store <- store + test$x[i]

  if(store < total/3){

    test$y[i] <- 1

  } else {

      if(store < 2*total/3){

        test$y[i] <- 2

      } else { 

        test$y[i] <- 3

      }     
  }    
}
Run Code Online (Sandbox Code Playgroud)

虽然成功,但我觉得一定有更好的方法(也许是我缺少的一个非常明显的解决方案)。

  • 我从不喜欢使用循环,尤其是嵌套 ifs,当矢量化方法可用时 - 即使有 100,000 多条记录,这段代码也会变得很慢
  • 这种方法将变得不可能复杂到编码到更多的组(不一定是循环,而是 ifs)
  • 需要预先订购色谱柱。可能无法绕过这个。

作为一个细微差别(并不是说它有区别),但要求和的数据并不总是(或永远)是连续的整数。

r bin-packing

3
推荐指数
2
解决办法
1602
查看次数

在R中查找所有闭合节点集

我有一个边缘列表如下(简单示例):

DT <- data.frame(x = c(letters[1:7],"a","b","c","a","d","e","f"), y = c(letters[1:7],"b","a","a","c","f","f","d"))
> DT
   x y
1  a a
2  b b
3  c c
4  d d
5  e e
6  f f
7  g g
8  a b
9  b a
10 c a
11 a c
12 d f
13 e f
14 f d
Run Code Online (Sandbox Code Playgroud)

然后我使用以下代码绘制了这个图:

require(igraph)
myadj <- get.adjacency(graph.edgelist(as.matrix(DT), directed=FALSE))
my_graph <- graph.adjacency(myadj)
layout <- layout.fruchterman.reingold(my_graph,niter=500,area=vcount(my_graph)^2.3,repulserad=vcount(my_graph)^2.8)
plot(my_graph, vertex.size=10, 
     vertex.label.cex=1,
     edge.arrow.size=0, edge.curved=TRUE,layout=layout)
Run Code Online (Sandbox Code Playgroud)

网络图

我现在想要的是提取所有封闭节点的集合.我不确定一个典型的符号会是什么样子,但我可以想象:

  node set
1    a   1
2    b …
Run Code Online (Sandbox Code Playgroud)

r graph-theory

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

按组移动data.table中的一列列表

我在 R 中有一列列表:

DT <- data.table(foo = c(list(c("a","b","c")), list(c("b","c")), list(c("a","b")), list(c("a"))), id = c(1,1,2,2))
DT
     foo id
1: a,b,c  1
2:   b,c  1
3:   a,b  2
4:     a  2
Run Code Online (Sandbox Code Playgroud)

我想做的是复制典型的换班行为以获得:

     foo id
1:   b,c  1
2:    NA  1
3:     a  2
4:    NA  2
Run Code Online (Sandbox Code Playgroud)

对于普通列,我将使用 shift,但这会将列表拆分为列并移动这些列(并标记警告):

DT[ , shift(foo,1,type = "lead"), by = id]
   id V1 V2
1:  1  b  c
2:  1  c NA
3:  1 NA  c
4:  2  b NA
5:  2 NA NA
Run Code Online (Sandbox Code Playgroud)

如果我将 shift 调用包装到一个列表中,返回的是一个列表,但只有向量元素已被移动: …

r data.table

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

使用eval()命名r中的data.table列时出错

我的目标是根据另一个变量的值命名数据表的新列.通常情况下,这很简单,但是对于数据表,任何列名输入都被视为字符串,而不是变量(我认为?)

为此,我想我会使用eval函数.我的代码:

library(data.table)

DT <- data.table(x = c(1,1,2,2,3), y = 6:10, z = 11:15)

sumtitle <- "Sum"

Output <- DT[ , j = list(eval(sumtitle) = sum(y)), by = x]
Run Code Online (Sandbox Code Playgroud)

但这会回来

Error: unexpected '=' in "Output <- DT[ , j = list(eval(sumtitle) ="
Run Code Online (Sandbox Code Playgroud)

这对我来说很奇怪,因为

> eval(sumtitle)
[1] "Sum"
Run Code Online (Sandbox Code Playgroud)

Output <- DT[ , j = list("Sum" = sum(y)), by = x]
Run Code Online (Sandbox Code Playgroud)

按预期工作.

任何帮助将非常感激.

r data.table

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

循环遍历函数列表,并将函数名称作为字符返回

在R中,我有一个函数列表(模拟策略).例如:

a <- function(x){
        return(x)
      }

b <- function(y){
        return(y)
      }
funclist <- list(a,b)
Run Code Online (Sandbox Code Playgroud)

我想编写一些返回每个函数名称的代码.通常,对于我将使用的函数:

as.character(substitute(a))
Run Code Online (Sandbox Code Playgroud)

但这对列表不起作用,因为它只返回列表名称(如预期的那样).然后我尝试了lapply:

> lapply(X = funclist,FUN = substitute)
Error in lapply(X = funclist, FUN = substitute) : 
  '...' used in an incorrect context
Run Code Online (Sandbox Code Playgroud)

但得到上述错误.

理想情况下,我会得到(lapply解决方案):

[[1]]
[1] "a"

[[2]]
[1] "b"
Run Code Online (Sandbox Code Playgroud)

甚至(sapply解决方案):

[1] "a" "b"
Run Code Online (Sandbox Code Playgroud)

r

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

选择R中向量中的特定元素

我有一个向量, myvector <- c("a","b","c","cat","4","dog","cat","f").我想选择那些紧跟在包含字符串"cat"的元素之后的元素.

即,我想myvector2只包含"4"和"f".我不知道从哪里开始.

r

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