我正在尝试计算网格大小(x乘y)的所有可能值,这些值导致相同数量的单元格,因此例如2x2网格的单元格大小为4.我希望y为x的一半,以及总数,例如4000.所以我想我想要R计算x和y的所有可能的正整数值
function (total) {
x*y=total
x/y=2
x!=total
y!= total.
}
我想一种获得正整数的方法,并考虑不同的解决方案是允许总数比其原始值大10%(但不小,我需要网格至少与我给出的总值),在这种情况下,函数可以有两个字段,tot(例如4000)和容差(例如10%)。总计(在上面的草图函数中使用)比在必须介于tot和(tot + tolerance * tot)
之间我有几个单元格大小,所以4000只是一个例子。我正在尝试构建一个只返回正整数的快速函数,并返回一个X和Y的矩阵。
有什么想法吗?
非常感谢
答案 0 :(得分:2)
这个怎么样:
possible.sizes <- function(total, tolerance) {
min.total <- total
max.total <- total * (1 + tolerance)
min.y <- ceiling(sqrt(min.total/2))
max.y <- floor(sqrt(max.total/2))
if (max.y < min.y)
return(data.frame(x=numeric(0), y=numeric(0)))
y <- seq(min.y, max.y)
x <- 2*y
return(data.frame(x=x, y=y))
}
possible.sizes(4000, 0.1)
# x y
# 1 90 45
# 2 92 46