在传单中,我通常会创建一个地图:
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) 我想使用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):剧情中没有图层"
有什么建议
我在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. …
假设我有两列字符串:
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的第一个元素.
我试图将我的 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)
虽然成功,但我觉得一定有更好的方法(也许是我缺少的一个非常明显的解决方案)。
作为一个细微差别(并不是说它有区别),但要求和的数据并不总是(或永远)是连续的整数。
我有一个边缘列表如下(简单示例):
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 中有一列列表:
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 调用包装到一个列表中,返回的是一个列表,但只有向量元素已被移动: …
我的目标是根据另一个变量的值命名数据表的新列.通常情况下,这很简单,但是对于数据表,任何列名输入都被视为字符串,而不是变量(我认为?)
为此,我想我会使用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中,我有一个函数列表(模拟策略).例如:
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) 我有一个向量,
myvector <- c("a","b","c","cat","4","dog","cat","f").我想选择那些紧跟在包含字符串"cat"的元素之后的元素.
即,我想myvector2只包含"4"和"f".我不知道从哪里开始.
r ×10
data.table ×3
bin-packing ×1
ggplot2 ×1
graph-theory ×1
leaflet ×1
openssl ×1
plotly ×1
regex ×1
rpostgresql ×1
shiny ×1