如何测量许多功能的系统时间

时间:2019-03-29 07:50:24

标签: r time processing

如果我有各种各样的不同功能,而我不知道是哪个导致了较长的处理时间,那么如何衡量每个功能运行多长时间的好方法呢?

例如,聚集(sf软件包)中的帮助需要大量计算。我可以只在每行之前写system.time(),但是如果有一种更聪明的方法,那会很好,例如,如果我可以每行获取system.time或类似的东西。

m1 = cbind(c(0, 0, 1, 0), c(0, 1, 1, 0))
m2 = cbind(c(0, 1, 1, 0), c(0, 0, 1, 0))
pol = st_sfc(st_polygon(list(m1)), st_polygon(list(m2)))
set.seed(1985)
d = data.frame(matrix(runif(15), ncol = 3))
p = st_as_sf(x = d, coords = 1:2)
plot(pol)
plot(p, add = TRUE)
(p_ag1 = aggregate(p, pol, mean))
plot(p_ag1) # geometry same as pol
# works when x overlaps multiple objects in 'by':
p_buff = st_buffer(p, 0.2)
plot(p_buff, add = TRUE)
(p_ag2 = aggregate(p_buff, pol, mean)) # increased mean of second
# with non-matching features
m3 = cbind(c(0, 0, -0.1, 0), c(0, 0.1, 0.1, 0))
pol = st_sfc(st_polygon(list(m3)), st_polygon(list(m1)), st_polygon(list(m2)))
(p_ag3 = aggregate(p, pol, mean))
plot(p_ag3)
# In case we need to pass an argument to the join function:
(p_ag4 = aggregate(p, pol, mean, 
     join = function(x, y) st_is_within_distance(x, y, dist = 0.3)))

1 个答案:

答案 0 :(得分:1)

此函数将分别运行代码的每一行,如果将代码的c / p字符串传递给sys.time,则返回sys.time

sys.time.perrow <- function(str)
{
list <- strsplit(str,"\n")[[1]]
times <- sapply(list,function(line)
  {
  time <- system.time(eval(parse(text=line)))
  return(time)
},simplify=F,USE.NAMES = T)
return(times)
}

请注意:多行参数将破坏此代码。我将不得不考虑一些更复杂的事情。