R调用googleLanguageR为dataframe新增列报NA/NaN argument错误
报错原因
你遇到的Error: NA/NaN argument是调用gl_translate_detect()时的典型参数问题,触发原因基本是以下两点:
- 数据框的
comments列存在NA缺失值、空字符串内容,该函数不会自动跳过异常文本,接收到无效输入时会直接抛出参数错误 comments列是因子(factor)类型而非字符(character)类型,函数解析参数时无法识别因子值,会触发同类报错
另外你原写法没有做结果长度校验,万一接口调用时出现部分请求失败,返回的结果长度和原数据框行数不匹配,赋值时也会出问题。
可直接运行的修复代码
先预处理文本列规避无效输入,再做检测和结果匹配,全程保证行数和原数据框一致:
library(googleLanguageR) library(dplyr) df <- df %>% mutate( # 先把文本列统一转成字符型,避免因子类型导致的解析错误 comments = as.character(comments), # 给缺失值、空字符串填临时占位符,避免接口调用报错 comments_tmp = ifelse(is.na(comments) | trimws(comments) == "", "placeholder", comments) ) # 批量调用语言检测接口 detect_result <- gl_translate_detect(df$comments_tmp) # 匹配结果生成language列 df <- df %>% mutate( language = case_when( # 原文本为空的位置language留空 comments_tmp == "placeholder" ~ NA_character_, # 检测结果为en的赋值en,其余统一归为de detect_result$language == "en" ~ "en", TRUE ~ "de" ) ) %>% # 删除临时生成的辅助列 select(-comments_tmp)
调试建议
如果跑全量前想确认逻辑正确,可以先抽小部分数据测试:
# 抽前20行做检测测试 head(df$comments, 20) %>% gl_translate_detect() %>% print()
你提到单独调用检测函数能正常返回结果,说明接口认证本身没有问题,不需要调整gl_translate_detect的调用参数,只要处理好输入的异常值、列类型问题就能正常运行,最终输出的表会保留原有的title、comments列,新增符合要求的language列。
内容的提问来源于stack exchange,提问作者Ranji Raj
相关产品推荐
相关产品推荐

