R比较不等向量与不等式
我有两个长度不等的单矢量数据帧R比较不等向量与不等式,r,for-loop,vectorization,apply,inequality,R,For Loop,Vectorization,Apply,Inequality,我有两个长度不等的单矢量数据帧 aa<-data.frame(c(2,12,35)) bb<-data.frame(c(1,2,3,4,5,6,7,15,22,36)) aaaa我原来的帖子我已经找了很多次了 在我的例子中 aa<-data.frame(c(2,12,35)) bb<-data.frame(c(1,2,3,4,5,6,7,15,22,36)) x<-ecdf(bb[,1]) x(2) [1] 0.2 x(12) [1] 0.7
aa<-data.frame(c(2,12,35))
bb<-data.frame(c(1,2,3,4,5,6,7,15,22,36))
aaaa我原来的帖子我已经找了很多次了
在我的例子中
aa<-data.frame(c(2,12,35))
bb<-data.frame(c(1,2,3,4,5,6,7,15,22,36))
x<-ecdf(bb[,1])
x(2)
[1] 0.2
x(12)
[1] 0.7
x(35)
[1] 0.9
aa它们必须是数据帧吗?为什么不仅仅是向量?你试过sapply(aa[[1]],函数(x)sum(bb[[1]]吗向量很好,我的初始数据是在一个数据帧中,但如果可以在两个向量上完成,那就太好了。它成功了!在我的机器上大约30分钟。你有什么理由选择更好的方法吗?我对R是新手,正在尝试从我的错误中学习!谢谢看Rprof(…)
和总结(…)
用于分析代码。很有趣。我得到一个错误:无法分配大小为10.1 Gb的向量,这是以前从未发生过的。您查看过数据表吗?我只是在0.32秒内完成的。不确定您的意思。data.table用于什么?应用cdf_land函数?不,只是数据表。我作为.data.ta运行了ble(陆上高度)[,vapply(.I,“>”,水上高度[[1]],1)]
而且速度非常快
fun1<-function(a,b){k<-colSums(b<a)
k<-k*.000058242}
system.time(replicate(5000,data.frame(apply(aa,1,fun1,b=bb))))
user system elapsed
3.813 0.011 3.883
fun2<-function(a,b){k<-length(which(b<a))
k<-k*.000058242}
system.time(replicate(5000,data.frame(apply(aa,1,fun2,b=bb))))
user system elapsed
3.648 0.006 3.664
aa<-data.frame(c(2,12,35))
bb<-data.frame(c(1,2,3,4,5,6,7,15,22,36))
sapply(aa[[1]],function(x)sum(bb[[1]]<x))
# [1] 1 7 9
n <- 1.6e3
bb <- sample(1:n,1.7e6,replace=T)
aa <- 1:n
system.time(sapply(aa,function(x)sum(bb<x)))
# user system elapsed
# 14.63 2.23 16.87
n <- 1.6e4
bb <- sample(1:n,1.7e6,replace=T)
aa <- 1:n
system.time(sapply(aa,function(x)sum(bb<x)))
# user system elapsed
# 148.77 18.11 167.26
aa<-data.frame(c(2,12,35))
bb<-data.frame(c(1,2,3,4,5,6,7,15,22,36))
x<-ecdf(bb[,1])
x(2)
[1] 0.2
x(12)
[1] 0.7
x(35)
[1] 0.9
land_elevation <- data.frame(rnorm(1e6))
water_elevation<- data.frame(rnorm(1e6))
cdf_land<- ecdf(land_elevation[,1])
elevation_seq <- seq(from = min(water_elevation[,1]), to = max(water_elevation[,1]), length.out = 1000)
land <- sapply(elevation_seq, cdf_land)