R语言中for循环单独运行正常,封装进自定义函数后返回NULL是什么原因?
错误原因
R语言自定义函数默认返回最后一条执行语句的返回值,你编写的函数中最后执行的是嵌套for循环,而R的for循环本身的返回值为NULL,因此调用函数后得到的结果就是NULL。
修复方法
在函数末尾显式返回处理完成的向量即可,另外建议不要用R内置函数名match作为自定义函数名,避免命名冲突:
# 自定义匹配替换函数 my_match <- function(df,df2){ for(i in 1:length(df)) { for(j in 1:nrow(df2)){ if(df[i]==df2$id[j]){ df[i] <- df2$name[j] } } } # 显式返回处理后的向量 return(df) } # 测试运行 df <- 1:5 df2 <- data.frame(id=3:7, name=LETTERS[1:5]) df <- my_match(df,df2) df #> [1] "1" "2" "A" "B" "C"
更高效的替代实现
不需要手动写嵌套循环,直接用R内置的match()函数就能实现相同需求,代码更简洁运行效率更高:
df <- 1:5 df2 <- data.frame(id=3:7, name=LETTERS[1:5]) match_idx <- match(df, df2$id) df <- ifelse(!is.na(match_idx), df2$name[match_idx], df) df #> [1] "1" "2" "A" "B" "C"
内容的提问来源于stack exchange,提问作者user11916948
相关产品推荐
相关产品推荐

