我有一個向量如下:
example <- c(1, 2, 3, 8, 10, 11)
我正在嘗試撰寫一個函式,該函式回傳一個輸出作為您將獲得的輸出:
desired_output <- list(first_sequence = c(1, 2, 3),
second_sequence = 8,
third_sequence = c(10, 11)
)
實際上,我想要的是計算我的向量中有多少序列,以及每個序列的長度。碰巧一個串列作為“desired_ouput”??中的串列就足夠了。
最后是構造另一個向量,我們稱之為“b”,它包含以下內容:
b <- c(3, 3, 3, 1, 2, 2)
這背后的現實問題是測量 3D 點云中包含的 3D 物件的高度。
我嘗試撰寫一個回傳“example_list”中串列的函式和一個直接輸出向量“b”的遞回函式,但沒有成功。
有人有什么想法嗎?非常感謝你。
uj5u.com熱心網友回復:
我們可以通過按相鄰元素list的erence創建分組來拆分為adiff
out <- split(example, cumsum(c(TRUE, abs(diff(example)) != 1)))
然后,我們得到lengthsand replicate
unname(rep(lengths(out), lengths(out)))
[1] 3 3 3 1 2 2
uj5u.com熱心網友回復:
你可以這樣做:
out <- split(example, example - seq_along(example))
要獲得長度:
ln = unname(lengths(out))
rep(ln, ln)
[1] 3 3 3 1 2 2
uj5u.com熱心網友回復:
這里還有一個。不優雅但不同的方法:
- 創建示例向量的資料框
- 將元素分配給組
- 與
tapply
example_df <- data.frame(example = example)
example_df$group <- cumsum(ifelse(c(1, diff(example) - 1), 1, 0))
tapply(example_df$example, example_df$group, function(x) x)
$`1`
[1] 1 2 3
$`2`
[1] 8
$`3`
[1] 10 11
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/464848.html
