R 每个间隔中最大值的实际值

R 每个间隔中最大值的实际值,r,R,让我们假设 x = c(1, 2, 3.5, 4, 6, 7.5, 8, 9, 10, 11.5, 12) y = c(2.5, 6.5) I = split(x, findInterval(x, y)) f = function(I$'i', x) { d = pmax(outer(x, I$'i', "-"), 0) colSums(d - d^2/2) } 我想计算每个区间的每个值中fI$'I',x的值,然后找出哪个I$'I'实际值在每个区间中具有fI

让我们假设

x = c(1, 2, 3.5, 4, 6, 7.5, 8, 9, 10, 11.5, 12) 
y = c(2.5, 6.5) 
I = split(x, findInterval(x, y))
f = function(I$'i', x) {
        d = pmax(outer(x, I$'i', "-"), 0)
        colSums(d - d^2/2)
}
我想计算每个区间的每个值中fI$'I',x的值,然后找出哪个I$'I'实际值在每个区间中具有fI$'I',x的最大值。例如,如果我们有三个区间,我的结果应该是x的三个值,其中fI$'i',x是每个区间的最大值。如何找到这些值? 此外,应该提到的是,在我的代码的每次迭代中,向量y的值都会发生变化

我编写了这段代码,但找不到每个间隔中最大值的实际值:

for(i in 0:length(I)-1){
    max.value = I$'i'[which.max(f(I$'i', x))]
}
我得到了这个错误: pMaxOutEx中的错误,I,-,0:
无法将0长度向量与其他向量混合

问题是试图为列表的第i个元素编制索引。Doing I$'I'尝试获取与字符串'I'对应的列表元素,该字符串不存在:

> i <- 1
> I$'i'
NULL
假设f只是将一个向量而不是一个索引带入I,它的定义应该是:

f = function(vec, x) {
        d = pmax(outer(x, vec, "-"), 0)
        colSums(d - d^2/2)
}
循环如下:

for (i in 1:length(i)) {
     max.value = I[[i]][which.max(f(I[[i]], x))]
}
请注意,您可以直接迭代列表中的元素,而不需要对每个元素单独编制索引,因此我们还可以:

for (vec in I) {
     max.value = vec[which.max(f(vec, x))]
}

此外,您可能需要与现有的稍有不同的内容,因为在每个循环中,max.value都会被覆盖。

对于我来说,f的定义在R中不起作用,您确定这就是您在R中输入的内容吗?我非常确定I$'I'是一个语法错误。要将数字i转换为字符串,请尝试使用稍微不同的音符,例如i,0:lengthI-1不会给出您期望的输出:0:lengthI-1=[1]-1 0 1 2。您需要放上括号,以便R知道您想要的操作顺序:0:lengthI-1=[1]012@BensorBeny,如果此答案解决了您的问题,您应该单击其旁边的复选标记的轮廓,以表明其已被接受。其他问题你也应该这样做。
for (vec in I) {
     max.value = vec[which.max(f(vec, x))]
}