我正在使用 strucchange 包来确定我的曲线模型细分的位置。
我的代码如下所示:
l.fit <- loess(data$y~data$x)
px <- predict(l.fit,newdata=data$x)
bp <- breakpoints(px~1)
现在,bp的输出:
Optimal 6-segment partition:
Call:
breakpoints.formula(formula = px ~ 1)
Breakpoints at observation number:
161 254 347 440 533
Corresponding to breakdates:
0.2571885 0.4057508 0.5543131 0.7028754 0.8514377
断裂是有点无用的,因为我的x比例从1到700左右。但断点本身正是我想要的,特别是最后一个,533。
如果我输入:
bp[1]
我明白了:
$breakpoints
[1] 161 254 347 440 533
但如果我尝试将bp[1]
分配给新的向量,我什么也得不到。无论如何我可以隔离最后一个断点,即533,并将其分配给一个变量,这样我就可以在断点处绘制一条垂直线?我需要为几百个数据集执行此操作,因此能够隔离断点将非常有用。
谢谢!
答案 0 :(得分:4)
[
提取不会下降到最简单的形式,因此它仍然是一个列表。使用[[
或$
提取来获取数字向量。
bps <- bp[[1]]
或
bps <- bp$breakpoints
要获得最后一个,你需要计算它的长度并选择最后一个,或者反转它并选择第一个:
bps[length(bps)]
或
rev(bps)[1]
答案 1 :(得分:0)
我不知道你是否对R这么新,你认为执行这段代码会产生任何控制台输出:
vec <- bp[1]
如果您现在输入以下内容会发生什么:
vec
您应该使用bp [[“breakpoints”]] [5]或bp $ breakpoints [5]来获取最后一个断点。然后,您可以将其用作数据$ x的索引:
data$x[ bp$breakpoints[5] ]
如果你“以编程方式”这样做,那么使用[[“引用名称”]]版本的访问可能会更安全,因为$ version有一些不太重要的问题。