Error in substitute(FUN, env = parent.frame())[-1] :类别为‘symbol‘的对象不可以取子集 出错纠正

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

在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

24442552

兄弟们...谢谢知识付费

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值