R语言函数中if循环为何无法正确识别NA值?
R字符变量处理函数的NA值异常问题
我编写了一个用于修改字符变量的复杂函数,在处理NA值时遇到了不符合预期的异常情况,以下是最小可复现示例:
# 创建示例数据框 df <- data.frame(noun = c("apple", NA, "banana")) # 查看示例数据框 df #> noun #> 1 apple #> 2 <NA> #> 3 banana # 定义处理函数 process_my_df <- function(input_data, my_var) { # 基于现有变量创建新变量 for (i in 1:nrow(input_data)) { if (!is.na(input_data[[my_var]][i])) { input_data[[paste0(my_var, "_result")]][i] <- "is a fruit" } } return(input_data) } # 调用函数处理数据框 processed_df <- process_my_df(df, "noun") # 查看处理后的结果 processed_df #> noun noun_result #> 1 apple is a fruit #> 2 <NA> is a fruit #> 3 banana is a fruit
根据if (!is.na(input_data[[my_var]][i]))的判断条件,我预期的处理结果应该是:
#> noun noun_result #> 1 apple is a fruit #> 2 <NA> <NA> #> 3 banana is a fruit
请问导致这一异常的原因是什么?
编辑:通过添加一行初始化代码,问题已解决:
# 定义处理函数 process_my_df <- function(input_data, my_var) { # 基于现有变量创建新变量 # 先将新变量初始化为NA_character_ input_data[[paste0(my_var, "_result")]] = NA_character_ for (i in 1:nrow(input_data)) { if (!is.na(input_data[[my_var]][i])) { input_data[[paste0(my_var, "_result")]][i] <- "is a fruit" } } return(input_data) }
内容的提问来源于stack exchange,提问作者vlangen
相关产品推荐
相关产品推荐

