我想在法线图中绘制一些点,并将这些点链接到它下面显示的地图.我想要的基本是(这里我手动添加了链接):

不知怎的,我应该用segments它pdt=T来写边距,但我不确定我需要做什么数学变换才能为进入地图的分段末端设置正确的坐标.
我宁愿使用传统的plot功能而不是 ggplot2
这里是用于绘制示例的源(警告可能需要一些时间来加载打开的街道地图):
library(OpenStreetMap)
#Random point to plot in the graph
fdata=cbind.data.frame(runif(12),runif(12),c(rep("A",4),rep("B",4),rep("C",4)))
colnames(fdata)=c("x","y","city")
#random coordinate to plot in the map
cities=cbind.data.frame(runif(3,4.8,5),runif(3,50.95,51),c("A","B","C"))
colnames(cities)=c("long","lat","name")
#city to color correspondance
color=1:length(cities$name)
names(color)=cities$name
maxlat=max(cities$lat)
maxlong=max(cities$long)
minlat=min(cities$lat)
minlong=min(cities$long)
#get some open street map
map = openmap(c(lat=maxlat+0.02,long=minlong-0.04 ) ,
c(lat=minlat-0.02,long=maxlong+.04) ,
minNumTiles=9,type="osm")
longlat=openproj(map) #Change coordinate projection
par(mfrow=c(2,1),mar=c(0,5,4,6))
plot( fdata$y ~ fdata$x ,xaxt="n",ylab="Comp.2",xlab="",col=color[fdata$city],pch=20)
axis(3)
mtext(side=3,"-Comp.1",line=3)
par(mar=rep(1,4))
#plot the map
plot(longlat,removeMargin=F)
points(cities$lat ~ cities$long, col= color[cities$name],cex=1,pch=20) …Run Code Online (Sandbox Code Playgroud) 我有data.frame2291行和4列,我想选择列3与下一行的第2列匹配的行,然后从下一个匹配的行再次开始,直到匹配继续,直到它停止.
我尝试使用for循环1:nrow(df),但这不完全准确,因为i(我认为)并不真正从匹配行开始.
我目前的代码是这样的:
test <- NULL
x <- c()
y <- c()
for(i in 1:nrow(df)){
if(df[i,3]==df[i+1,2]){
x <- df[i,]
y <- df[i+1,]
i = i+1 #stuck at this
}
test <- rbind(test,x,y)
}
Run Code Online (Sandbox Code Playgroud)
示例数据如下所示:
X 2670000 3750000 C
X 3830000 8680000 E3
X 8680000 10120000 E1-A
X 10120000 11130079 D
X 11170079 11810079 E3
X 11810079 12810079 E2-A
X 12810079 13530079 E3
X 13530079 14050079 E3
X 14050079 15330079 A
X 15330079 …Run Code Online (Sandbox Code Playgroud) 我知道有很多类似的问题都得到了公认的答案(这里,这里甚至这个),但到目前为止,我没有找到关于如何在不重新启动 R 会话的情况下释放一些内存空间的明确答案。
我知道,可以保存他的工作区,重新启动 R 并重新加载工作区,但是:
情况似乎并非如此。即使在删除了我工作区的一半最大对象(感谢这个很好的答案)并运行之后gc(),top仍然给我提供了完全相同的内存使用百分比。
这里的一个评论,它说:
R 的垃圾收集将 RAM 标记为可用。由您的操作系统来收回
听起来不错,但不确定这真的发生了。top即使在rm()和之后gc(),甚至在操作系统中启动新的其他进程之后,甚至在 2 小时、10 小时或 3 天之后,仍然向我显示 R 使用的相同数量的内存。
这个评论表明它必须查看加载的库和图形设备,但为什么呢?我该如何解决?
如果我rm()一个3GB对象然后gc()用来释放内存,R 怎么可能仍然使用相同百分比的内存?
一切都在标题中.我期望order利用sort找到的值向量的顺序.因此sort应该比使用order矢量排序更快但不是:
library(microbenchmark)
ss=sample(100,10000,replace=T)
microbenchmark(sort(ss))
microbenchmark(ss[order(ss)])
Run Code Online (Sandbox Code Playgroud)
结果:
> microbenchmark(sort(ss))
Unit: microseconds
expr min lq mean median uq max neval
sort(ss) 141.535 144.6415 173.6581 146.358 150.2295 2531.762 100
> microbenchmark(ss[order(ss)])
Unit: microseconds
expr min lq mean median uq max neval
ss[order(ss)] 109.198 110.9865 115.6275 111.901 115.3655 197.204 100
Run Code Online (Sandbox Code Playgroud)
更大的例子:
ss=sample(100,1e8,replace=T)
microbenchmark(sort(ss), ss[order(ss)], times = 5)
# Unit: seconds
# expr min lq mean median uq max neval
# sort(ss) 5.427966 5.431971 5.892629 6.049515 6.207060 …Run Code Online (Sandbox Code Playgroud)