gpt4 book ai didi

r - 找到至少由 N 分隔的最大数字子集的最佳方法是什么?

转载 作者:行者123 更新时间:2023-12-05 03:18:08 25 4
gpt4 key购买 nike

我有兴趣获得最大尺寸的组,其元素之间的间距至少 N 个单位(N 可能是十进制),我想要一些具有以下输入/输出的东西

1 2 3 4 5, spaced by 2
1 3 5 | 2 4

35 40 45 50 55 60 65 70 75, spaced by 10
35 45 55 65 75 | 40 50 60 70

37.5 39.5 40.5 57.7 62 76.3, spaced by 3.5
37.5 57.7 62 76.3 | 39.5 57.7 62 76.3

我试过的是使用以下内容:

split(vector,vector%%spacing)

它似乎有效,但我认为 double 的模数是一种非常奇怪的行为的原因,如果它们来自数据的第 34 行,引入函数的相同值会产生不同的结果。框架,或者如果它们直接传递给函数...我准备了这个片段,以便任何人都可以尝试复制该行为:

calculate_solution <- function(parA, parB, parC, parD) {
varA <- parA/2
varB <- seq(from=varA+parB,to=parA-parB,by=parB)

varC <- 1 / parC

varD <- split(varB,varB%%varC)

print(varD)
}

df_1 <- list(
a=seq(from=75,to=85,by=5),
b=seq(from=1,to=2.5,by=0.5),
c=seq(from=0.05,to=0.4,by=0.05),
d=seq(from=2,to=2,by=1)) %>%
expand.grid()

print(c(df_1[34,]$a,df_1[34,]$b,df_1[34,]$c,df_1[34,]$d))

#[1] 75.00 2.50 0.15 2.00

calculate_solution(df_1[34,]$a,df_1[34,]$b,df_1[34,]$c,df_1[34,]$d)

#$`3.5527136788005e-15`
#[1] 40
#
#$`5.32907051820075e-15`
#[1] 60
#
#$`0.833333333333337`
#[1] 47.5
#
#$`0.833333333333339`
#[1] 67.5
#
#$`1.66666666666667`
#[1] 55
#
#$`2.5`
#[1] 42.5
#
#$`2.50000000000001`
#[1] 62.5
#
#$`3.33333333333334`
#[1] 50 70
#
#$`4.16666666666667`
#[1] 57.5
#
#$`5`
#[1] 45
#
#$`5.00000000000001`
#[1] 65
#
#$`5.83333333333334`
#[1] 52.5 72.5
#

df_2 <- data.frame(a=75.0,b=2.5,c=0.15,d=2.0)

calculate_solution(df_2[1,]$a,df_2[1,]$b,df_2[1,]$c,df_2[1,]$d)

#$`0.83333333333333`
#[1] 67.5
#
#$`0.833333333333331`
#[1] 47.5
#
#$`1.66666666666666`
#[1] 55
#
#$`2.5`
#[1] 42.5 62.5
#
#$`3.33333333333333`
#[1] 50 70
#
#$`4.16666666666666`
#[1] 57.5
#
#$`5`
#[1] 45 65
#
#$`5.83333333333333`
#[1] 52.5 72.5
#
#$`6.66666666666666`
#[1] 60
#
#$`6.66666666666667`
#[1] 40

我没有试图找出这种行为背后的原因,而是想也许我可以找到另一种方法来实现我想要的,或者至少可以找到正确的术语来指代我正在尝试做的事情。

最佳答案

sapply 中使用 %% 并将其等于 equispace/2 并将零设为子集。

f <- \(x, s) {stopifnot(s > 1); lapply(c((s/2), 0), \(z) x[x %% s == z])}


f(x1, 2)
# [[1]]
# [1] 1 3 5
#
# [[2]]
# [1] 2 4

f(x2, 10)
# [[1]]
# [1] 35 45 55 65 75
#
# [[2]]
# [1] 40 50 60 70

关于r - 找到至少由 N 分隔的最大数字子集的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73818230/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com