Error in substitute(FUN, env = parent.frame())[-1] :类别为’symbol’的对象不可以取子集
summaryBy()函数 mtcars举例
在近期的R语言学习中。在运用summaryBy()函数做多统计量描述统计时,一直被持续警告一个错误,Error in substitute(FUN, env = parent.frame())[-1] :类别为’symbol’的对象不可以取子集。
由于是R语言小白,多方面搜查也无果,后搜寻 env=parent.frame()的意思。勉强猜测是函数问题。
后来经过验证,确实是mean函数出现错误。
写下纠正错误的经过,加深对R语言的理解。
>mycars<-mtcars[c("mpg","hp","wt","am")]
>library(doBy)
>summaryBy(mpg+hp+wt~am,data=mycars,FUN=mean)
Error in substitute(FUN, env = parent.frame())[-1] :
类别为'symbol'的对象不可以取子集
后来我经过多方查询,试验,发现可能是 mean 函数在之前的学习中给它赋值了,导致在取用函数时R首先认定它是变量名称而非函数。
试验过程↓
>summaryBy(mpg+hp+wt~am,data=mycars,FUN=sum)
am mpg.sum hp.sum wt.sum
1 0 325.8 3045 71.609
2 1 317.1 1649 31.343
接着试着敲了敲 mean 看看反应如何
>mean
N.Amer Europe Asia S.Amer Oceania Africa Mid.Amer
1951 45939.00 21574.00 2876.000 1815.000 1646 89 555.0000
1956 60423.00 29990.00 4708.000 2568.000 2366 1411 733.0000
1957 64721.00 32510.00 5230.000 2695.000 2526 1546 773.0000
1958 68484.00 35218.00 6662.000 2845.000 2691 1663 836.0000
1959 71799.00 37598.00 6856.000 3000.000 2868 1769 911.0000
1960 76036.00 40341.00 8220.000 3145.000 3054 1905 1008.0000
1961 79831.00 43173.00 9053.000 3338.000 3224 2005 1076.0000
mean 66747.57 34343.43 6229.286 2772.286 2625 1484 841.7143
发现确实是之前的我学习时把mean给赋值了。(并且在退出时选择了保存)
于是从base包中调用mean函数。最终解决该问题。
>base::mean
function (x, ...)
UseMethod("mean")
<bytecode: 0x000002465777ceb0>
<environment: namespace:base>
>summaryBy(mpg+hp+wt~am,data = mtcars,FUN = base::mean)
am mpg.base::mean hp.base::mean wt.base::mean
1 0 17.14737 160.2632 3.768895
2 1 24.39231 126.8462 2.411000