我想根據條件陳述句分配一個 vecotr 。我該怎么做呢?這是我嘗試過的:
zero_rows <- ifelse(i == 1, c(2,3,4,7,12),
ifelse(i == 2, c(4,7,12),
ifelse(i == 3, c(2,3,4,7,9,12),
ifelse(i == 4, c(4,7,9),
ifelse(i == 5, c(4,12),
ifelse(i == 6, c(9,12),
ifelse(i == 7, 12,
ifelse(i == 8, c(2,3,4,7,9,12), 0))))))))
和
zero_rows <- case_when(i == 1 ~ c(2,3,4,7,12),
i == 2 ~ c(4,7,12),
i == 3 ~ c(2,3,4,7,9,12),
i == 4 ~ c(4,7,9),
i == 5 ~ c(4,12),
i == 6 ~ c(9,12),
i == 7 ~ 12,
i == 8 ~ c(2,3,4,7,9,12),
TRUE ~ 0)
uj5u.com熱心網友回復:
這可能是一個案例switch
fn <- function(i) {
i <- as.character(i)
switch(i,
"1" = c(2,3,4,7,12),
"2" = c(4,7,12),
"3" = c(2,3,4,7,9,12),
"4" = c(4,7,9),
"5" = c(4,12),
"6" = c(9,12),
"7" = 12,
"8" = c(2,3,4,7,9,12),
0)
}
-測驗
> fn(1)
[1] 2 3 4 7 12
> fn(2)
[1] 4 7 12
> fn(3)
[1] 2 3 4 7 9 12
> fn(9)
[1] 0
> fn(10)
[1] 0
如果我們想對列 ('col1') 的每個值執行此操作,請使用rowwise輸出并將其包裝在list
library(dplyr)
df1 %>%
rowwise %>%
mutate(out = list(fn(col1)))
或與map
library(purrr)
df1 %>%
mutate(out = map(col1, fn))
ifelse/if_else/case_when- 期望所有引數的長度相同。根據顯示的代碼,長度并非因輸入引數而異
uj5u.com熱心網友回復:
i用作索引是最自然的,如下所示:
l <- list(c(2, 3, 4, 7, 12),
c(4, 7, 12),
c(2, 3, 4, 7, 9, 12),
c(4, 7, 9),
c(4, 12),
c(9, 12),
12,
c(2, 3, 4, 7, 9, 12))
zero_rows <- ifelse(i %in% seq_along(l), l[i], list(0))
盡管完全避免會更安全、更快捷ifelse:
ok <- i %in% seq_along(l)
zero_rows <- rep.int(list(0), length(i))
zero_rows[ok] <- l[i[ok]]
uj5u.com熱心網友回復:
我們可以嘗試嵌套ifelse,list如下所示
f <- function(i) {
ifelse(i == 1, list(c(2, 3, 4, 7, 12)),
ifelse(i == 2, list(c(4, 7, 12)),
ifelse(i == 3, list(c(2, 3, 4, 7, 9, 12)),
ifelse(i == 4, list(c(4, 7, 9)),
ifelse(i == 5, list(c(4, 12)),
ifelse(i == 6, list(c(9, 12)),
ifelse(i == 7, list(12),
ifelse(i == 8, list(c(2, 3, 4, 7, 9, 12)), 0)
)
)
)
)
)
)
)[[1]]
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/445256.html
