驗證 - 斷言以下內容:
-
data
的列名稱必須包含全部original_names
。
檢查 - 返回以下內容:
-
ok
邏輯。檢查通過嗎? -
missing_names
字符向量。缺少的列名稱。
細節
如果缺少的列名為 ".outcome"
,則會引發特殊錯誤。這種情況僅發生在使用 xy-method 調用 mold()
且提供矢量 y
值而不是數據幀或矩陣的情況下。在這種情況下, y
被強製為數據幀,並添加自動名稱 ".outcome"
,這就是在 forge()
中查找的內容。如果發生這種情況,並且用戶嘗試使用 forge(..., outcomes = TRUE)
請求結果,但提供的 new_data
不包含所需的 ".outcome"
列,則會拋出一個特殊錯誤,告訴他們該怎麽做。請參閱示例!
驗證
Hardhat 提供兩個級別的驗證函數。
-
check_*()
:檢查條件,並返回列表。該列表始終包含至少一個元素ok
,這是一個指定檢查是否通過的邏輯。每個檢查還在返回的列表中檢查特定元素,可用於構造有意義的錯誤消息。 -
validate_*()
:檢查條件,如果不通過則出錯。這些函數調用相應的檢查函數,然後提供默認的錯誤消息。如果您作為開發人員想要不同的錯誤消息,請自行調用check_*()
函數,並提供您自己的驗證函數。
例子
# ---------------------------------------------------------------------------
original_names <- colnames(mtcars)
test <- mtcars
bad_test <- test[, -c(3, 4)]
# All good
check_column_names(test, original_names)
#> $ok
#> [1] TRUE
#>
#> $missing_names
#> character(0)
#>
# Missing 2 columns
check_column_names(bad_test, original_names)
#> $ok
#> [1] FALSE
#>
#> $missing_names
#> [1] "disp" "hp"
#>
# Will error
try(validate_column_names(bad_test, original_names))
#> Error in validate_column_names(bad_test, original_names) :
#> The following required columns are missing: 'disp', 'hp'.
# ---------------------------------------------------------------------------
# Special error when `.outcome` is missing
train <- iris[1:100, ]
test <- iris[101:150, ]
train_x <- subset(train, select = -Species)
train_y <- train$Species
# Here, y is a vector
processed <- mold(train_x, train_y)
# So the default column name is `".outcome"`
processed$outcomes
#> # A tibble: 100 × 1
#> .outcome
#> <fct>
#> 1 setosa
#> 2 setosa
#> 3 setosa
#> 4 setosa
#> 5 setosa
#> 6 setosa
#> 7 setosa
#> 8 setosa
#> 9 setosa
#> 10 setosa
#> # ℹ 90 more rows
# It doesn't affect forge() normally
forge(test, processed$blueprint)
#> $predictors
#> # A tibble: 50 × 4
#> Sepal.Length Sepal.Width Petal.Length Petal.Width
#> <dbl> <dbl> <dbl> <dbl>
#> 1 6.3 3.3 6 2.5
#> 2 5.8 2.7 5.1 1.9
#> 3 7.1 3 5.9 2.1
#> 4 6.3 2.9 5.6 1.8
#> 5 6.5 3 5.8 2.2
#> 6 7.6 3 6.6 2.1
#> 7 4.9 2.5 4.5 1.7
#> 8 7.3 2.9 6.3 1.8
#> 9 6.7 2.5 5.8 1.8
#> 10 7.2 3.6 6.1 2.5
#> # ℹ 40 more rows
#>
#> $outcomes
#> NULL
#>
#> $extras
#> NULL
#>
# But if the outcome is requested, and `".outcome"`
# is not present in `new_data`, an error is thrown
# with very specific instructions
try(forge(test, processed$blueprint, outcomes = TRUE))
#> Error in validate_missing_name_isnt_.outcome(check$missing_names) :
#> The following required columns are missing: '.outcome'.
#>
#> (This indicates that `mold()` was called with a vector for `y`. When this is the case, and the outcome columns are requested in `forge()`, `new_data` must include a column with the automatically generated name, '.outcome', containing the outcome.)
# To get this to work, just create an .outcome column in new_data
test$.outcome <- test$Species
forge(test, processed$blueprint, outcomes = TRUE)
#> $predictors
#> # A tibble: 50 × 4
#> Sepal.Length Sepal.Width Petal.Length Petal.Width
#> <dbl> <dbl> <dbl> <dbl>
#> 1 6.3 3.3 6 2.5
#> 2 5.8 2.7 5.1 1.9
#> 3 7.1 3 5.9 2.1
#> 4 6.3 2.9 5.6 1.8
#> 5 6.5 3 5.8 2.2
#> 6 7.6 3 6.6 2.1
#> 7 4.9 2.5 4.5 1.7
#> 8 7.3 2.9 6.3 1.8
#> 9 6.7 2.5 5.8 1.8
#> 10 7.2 3.6 6.1 2.5
#> # ℹ 40 more rows
#>
#> $outcomes
#> # A tibble: 50 × 1
#> .outcome
#> <fct>
#> 1 virginica
#> 2 virginica
#> 3 virginica
#> 4 virginica
#> 5 virginica
#> 6 virginica
#> 7 virginica
#> 8 virginica
#> 9 virginica
#> 10 virginica
#> # ℹ 40 more rows
#>
#> $extras
#> NULL
#>
相關用法
- R hardhat validate_prediction_size 確保預測具有正確的行數
- R hardhat validate_outcomes_are_univariate 確保結果是單變量
- R hardhat validate_no_formula_duplication 確保公式中不出現重複項
- R hardhat validate_outcomes_are_numeric 確保結果都是數字
- R hardhat validate_outcomes_are_binary 確保結果具有二元因子
- R hardhat validate_outcomes_are_factors 確保結果隻有因子列
- R hardhat validate_predictors_are_numeric 確保預測變量都是數字
- R hardhat default_recipe_blueprint 默認配方藍圖
- R hardhat is_blueprint x 是預處理藍圖嗎?
- R hardhat default_formula_blueprint 默認公式藍圖
- R hardhat update_blueprint 更新預處理藍圖
- R hardhat weighted_table 加權表
- R hardhat get_levels 從 DataFrame 中提取因子水平
- R hardhat add_intercept_column 向數據添加截距列
- R hardhat is_frequency_weights x 是頻率權重向量嗎?
- R hardhat model_offset 提取模型偏移
- R hardhat standardize 標準化結果
- R hardhat model_matrix 構建設計矩陣
- R hardhat is_importance_weights x 是重要性權重向量嗎?
- R hardhat run-mold 根據藍圖 Mold()
- R hardhat get_data_classes 從 DataFrame 或矩陣中提取數據類
- R hardhat fct_encode_one_hot 將一個因子編碼為 one-hot 指標矩陣
- R hardhat new_frequency_weights 構建頻率權重向量
- R hardhat default_xy_blueprint 默認 XY 藍圖
- R hardhat shrink 僅對所需列進行子集化
注:本文由純淨天空篩選整理自Davis Vaughan等大神的英文原創作品 Ensure that data contains required column names。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。