如何在R中实现对数据框列表调用指定列名的函数?lapply报错解决
解决lapply调用自定义函数时的参数缺失问题
你的报错原因很明确:自定义函数calculate_angles1需要5个参数,但你用lapply时只传递了列表中的数据框(对应data参数),剩下的pt1_X、pt1_Y、pt2_X、pt2_Y四个参数没传,所以R提示参数缺失。
根据你的场景(所有数据框列名完全一致),有两种简单的解决方法:
方法一:给函数参数设置默认值
因为所有数据框的列名都是固定的pt1_X、pt1_Y等,直接给函数的参数设置默认值,这样调用时就不用重复传递这些参数了:
# 修改后的函数 calculate_angles1 <- function(data, pt1_X = "pt1_X", pt1_Y = "pt1_Y", pt2_X = "pt2_X", pt2_Y = "pt2_Y") { data$Mx <- (data[[pt1_X]] - data[[pt2_X]]) data$My <- (data[[pt1_Y]] - data[[pt2_Y]]) return(data) } # 直接调用lapply即可 AoA <- lapply(new_list, calculate_angles1)
方法二:通过lapply传递额外参数
如果之后需要灵活修改列名,可以在lapply中直接传递函数需要的额外参数,lapply会自动把这些参数传递给自定义函数:
AoA <- lapply(new_list, calculate_angles1, pt1_X = "pt1_X", pt1_Y = "pt1_Y", pt2_X = "pt2_X", pt2_Y = "pt2_Y")
两种方法都能解决你的报错,第一种更适合当前固定列名的场景,第二种更灵活。
内容的提问来源于stack exchange,提问作者twilightecologist
相关产品推荐
相关产品推荐

