小编Sim*_* C.的帖子

R两个图表,线条从一个到另一个

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

不知怎的,我应该用segmentspdt=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)

plot r margins coordinates

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

选择具有特定列匹配条件的行

我有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 dataframe

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

如何在无需重启 R 会话的情况下清理 R 内存

我知道有很多类似的问题都得到了公认的答案(这里这里甚至这个),但到目前为止,我没有找到关于如何在不重新启动 R 会话的情况下释放一些内存空间的明确答案。

我知道,可以保存他的工作区,重新启动 R 并重新加载工作区,但是:

  1. 我不确定,但是这样做您必须重新加载所有库,对吗?
  2. 如果你的工作空间很大,这样做可能需要时间,如果我经常这样做,我不想每次都浪费时间。
  3. 如果我删除一个大对象,是否只是实际释放该对象占用的内存的正常行为?

情况似乎并非如此。即使在删除了我工作区的一半最大对象(感谢这个很好的答案)并运行之后gc()top仍然给我提供了完全相同的内存使用百分比。

这里的一个评论,它说:

R 的垃圾收集将 RAM 标记为可用。由您的操作系统来收回

听起来不错,但不确定这真的发生了。top即使在rm()和之后gc(),甚至在操作系统中启动新的其他进程之后,甚至在 2 小时、10 小时或 3 天之后,仍然向我显示 R 使用的相同数量的内存。

这个评论表明它必须查看加载的库和图形设备,但为什么呢?我该如何解决?

如果我rm()一个3GB对象然后gc()用来释放内存,R 怎么可能仍然使用相同百分比的内存?

memory garbage-collection r

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

为什么sort比R中的order函数慢?

一切都在标题中.我期望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)

5
推荐指数
2
解决办法
831
查看次数

标签 统计

r ×3

coordinates ×1

dataframe ×1

garbage-collection ×1

margins ×1

memory ×1

plot ×1