【发布时间】:2016-10-05 09:20:47
【问题描述】:
我正在生成很多地图,其中的休息点会发生变化。我想要相同的间隔,但地图之间的最高数字会发生变化。我可以使用多个if,但一定有更好的方法吗?
maxvalues <- c(453, 25)
breaks <- c(0,1,2,5,10,20,50,100,200)
我想从这里得到
0,1,2,5,10,20,50,100,200, 453
0,1,2,5,10,25
有什么想法吗?
【问题讨论】:
我正在生成很多地图,其中的休息点会发生变化。我想要相同的间隔,但地图之间的最高数字会发生变化。我可以使用多个if,但一定有更好的方法吗?
maxvalues <- c(453, 25)
breaks <- c(0,1,2,5,10,20,50,100,200)
我想从这里得到
0,1,2,5,10,20,50,100,200, 453
0,1,2,5,10,25
有什么想法吗?
【问题讨论】:
我们可以遍历'maxvalues',获取'breaks'中小于它的元素,与'x'连接,然后unlist
unlist(lapply(maxvalues,function(x) c(breaks[breaks< x], x)))
#[1] 0 1 2 5 10 20 50 100 200 453 0 1 2 5 10 20 25
【讨论】:
maxvalues 是一个向量。通过使用lapply,它在list 中循环遍历该向量中的每个元素,创建布尔表达式(breaks < x),子集breaks(breaks[breaks < x]),与元素连接(@987654329 @) 和 unlist 到一个向量。
鉴于breaks 已排序,我认为findInterval 非常适合您的问题,因为您可以找到小于您定义的最大值的最大数字。以下是如何去:
sapply(maxvalues, function(x) c(breaks[1:findInterval(x, breaks)], x))
#[[1]]
# [1] 0 1 2 5 10 20 50 100 200 453
#[[2]]
#[1] 0 1 2 5 10 20 25
【讨论】: