如何使用lapply调用自定义函数?R语言函数应用问题
解决R中lapply应用自定义函数报错的问题
错误原因
你写的replacewithna函数用了普通的if判断,但lapply会把数据框的**整列(向量)**传给函数参数x,此时x == -99会生成一个和列长度一致的逻辑向量,而普通if只能处理长度为1的条件,因此触发了the condition has length > 1错误。
解决方案
方法一:修改自定义函数为向量化版本
把函数里的if/else替换为支持向量操作的ifelse,就能直接处理整列数据:
replacewithna <- function(x) { ifelse(x == -99, NA, x) }
之后正常使用lapply,记得把返回的列表转回数据框:
survey1 <- as.data.frame(lapply(survey1, replacewithna))
方法二:直接用匿名函数在lapply中处理
不用自定义函数,直接在lapply内写匿名函数完成替换,更简洁:
survey1 <- as.data.frame(lapply(survey1, function(col) { col[col == -99] <- NA col }))
方法三:用tidyverse工具快速处理(可选)
如果习惯用tidyverse生态,用dplyr的mutate_all可以一键处理所有列:
library(dplyr) survey1 <- survey1 %>% mutate_all(~ifelse(.x == -99, NA, .x))
内容的提问来源于stack exchange,提问作者u210167
相关产品推荐
相关产品推荐

