R语言自定义函数报错:unused argument (.) 求助排查
问题解决:
unused argument (.) 错误 - 直接原因:使用管道
%>%时,管道会自动将左侧的train_data作为第一个参数传入addTicketColumns函数,但你又手动指定了df = train_data,导致函数收到两个参数(.和df),而你的函数仅定义了一个参数,因此触发报错。 - 修正方式:二选一即可:
- 去掉管道,直接调用函数:
addTicketColumns(df = train_data) - 保留管道,移除手动传参:
train_data %>% addTicketColumns()
- 去掉管道,直接调用函数:
函数逻辑的核心问题修正
你的两个自定义函数都存在语法和逻辑错误,就算解决了上述报错也无法正常工作,以下是修正方案:
1. addTicketColumns 函数修正
原函数的列创建方式完全错误,正确的tidyverse写法是用mutate创建空列:
addTicketColumns <- function(df){ df %>% mutate( Ticket_Letters = NA_character_, # 创建字符型空列 Ticket_Numbers = NA_real_ # 创建数值型空列 ) }
2. ticketSplit 函数修正
原函数存在未定义变量、循环逻辑混乱等问题,用tidyverse的字符串函数可以替代低效循环,实现Ticket拆分:
ticketSplit <- function(df) { df %>% # 拆分带空格的Ticket,无字母的自动填充NA separate(Ticket, into = c("Ticket_Letters", "Ticket_Numbers"), sep = " ", fill = "left", remove = FALSE) %>% # 处理无字母的情况,将纯数字Ticket的字母列设为NA mutate( Ticket_Letters = if_else(Ticket_Numbers == Ticket, NA_character_, Ticket_Letters), Ticket_Numbers = as.double(Ticket_Numbers) ) }
最终调用方式
修正后直接用管道调用拆分函数即可(无需单独调用addTicketColumns,拆分函数已包含列创建逻辑):
train_data <- train_data %>% ticketSplit()
内容的提问来源于stack exchange,提问作者Jack Dansbury
相关产品推荐
相关产品推荐

