我有一個包含 22 列和多行的 excel 表資料框,具體取決于輸出。有一列名為 (let's say) column_1
。現在我想使用斷言測驗整個作業表,但是有一個條件,如果在它的任何一行(比如說第 4 行)中column_1
有一個特定值1
,我寫的斷言將不會針對所有 22 列的整行運行,否則它將照常運行每一列的斷言。
虛擬資料:
column_1 | column_2 | column_3
NA | "House" | 12
NA | "Plot" | 34
NA | "Office" | 90
1 | "Villa" | 1008
...
...
...
原始邏輯
if (excel_sheet[["column_1"]] == "1") {
# the assertion will **not** run for that specific row
} else {
# the assertion will run for that specific row
assert_numeric(x = excel_sheet[["column_1"]], any.missing = T, lower = 1, upper = 1)
assert_numeric(x = excel_sheet[["column_2"]], any.missing = F, lower = 0, upper = 1)
assert_numeric(x = excel_sheet[["column_3"]], any.missing = F)
assert_character(x = excel_sheet[["column_4"]], any.missing = F)
...
...
...
}
uj5u.com熱心網友回復:
不熟悉checkmate
包及其功能。但是,如果我正確閱讀了您想要的問題
- 如果沒有特定值,請檢查一個特定列。
- 如果是這種情況,請運行其余代碼。
采用提供的代碼,它應該可以使用 for 回圈:
for (i in excel_sheet$column_1){
if(i != 1){
# comment
assert_numeric(x = i, any.missing = T, lower = 1, upper = 1)
assert_numeric(x = i, any.missing = F, lower = 0, upper = 1)
assert_numeric(x = i, any.missing = F)
assert_character(x = i, any.missing = F)
...
...
...
重要的
- 請注意,注釋需要輸入“#”而不是雙斜杠
- 當我閱讀您的代碼和我的答案時,在我看來代碼只會關注特定單元格
i
而不是行,您要更改/斷言單元格還是行?
uj5u.com熱心網友回復:
@Omniswitcher 答案是最接近的。這是我的最終解決方案。
for (i in 1:nrow(excel_sheet)) {
if (excel_sheet[["column_1"]][i] != 1) {
assert_numeric(x = excel_sheet[["column_2"]][i], any.missing = F, lower = 0, upper = 1)
assert_numeric(x = excel_sheet[["column_3"]][i], any.missing = F)
assert_character(x = excel_sheet[["column_4"]][i], any.missing = F)
...
...
...
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/505168.html