map_dbl调用median正常但调用mean报错的原因探究
问题原因解析
核心差异在于purrr的map函数传递参数的方式:
当直接写
map_dbl(mtcars, mean)时,map会把mtcars的每个列(向量)作为第一个参数传给mean,同时会额外把列的名字(比如"mpg")作为第二个参数传入。而mean函数的第二个参数是trim,要求传入0到0.5之间的数值,传入字符串列名后,mean内部处理出错,返回长度为0的空向量,触发了map_dbl的报错——它要求每个结果必须是长度1的数值。为什么
map_dbl(mtcars, median)能正常运行?因为median函数的第二个参数是na.rm(逻辑值),R会把传入的字符串列名强制转为TRUE,相当于调用median(列向量, na.rm=TRUE),而mtcars里没有缺失值,所以能正常返回长度1的中位数,不会报错。使用
~mean(.)时,你定义了一个只接收单个参数的匿名函数:function(x) mean(x)。map只会把每个列传给这个匿名函数的唯一参数,不会传递额外的列名参数,所以调用的是标准的mean(列向量),能正确返回长度1的均值,自然就不会报错。
内容的提问来源于stack exchange,提问作者menomale
相关产品推荐
相关产品推荐

