R中如何修改自定义函数以支持传入过滤后的dataframe计算数位和
R函数适配任意数据框计算解决方案
原有函数问题点
- 函数参数未被实际使用,内部硬编码读取全局环境的
df,导致传入过滤后的子集不生效 - 第二位数字提取逻辑错误,
substring的起止位置误写为1,1,实际应该取2,2 - 原参数名
sum和R内置求和函数重名,容易引发命名冲突
修正后的函数代码
sumOfNumbers <- function(data) { # 提取第一位数字求和 firstNumber <- sum(as.numeric(substring(data$score, 1, 1))) # 提取第二位数字求和 secondNumber <- sum(as.numeric(substring(data$score, 2, 2))) # 返回带命名的结果,可读性更强 return(c(first_sum = firstNumber, second_sum = secondNumber)) }
调用测试
全量数据测试
sumOfNumbers(df)
返回第一位总和16、第二位总和6,符合全量计算预期。
2020年子集测试
year2020 <- subset(df, year == 2020) sumOfNumbers(year2020)
返回结果:first_sum=6、second_sum=1,和预期结果完全一致。
内容的提问来源于stack exchange,提问作者user15288243
相关产品推荐
相关产品推荐

