gini <- function(x,correct=FALSE){
n=length(x)
fun=function(a,b)abs(a-b)
ifelse(correct,sum(outer(x,x,fun))/(2*n*(n-1)*mean(x)),sum(outer(x,x,fun))/2*n^2*mean(x)))
}

运行后提示:
Error: unexpected symbol in "gini <- function(x,correct=FALSE){n = length(x)fun"
刚学习R呢,想着按照书本实践一下,这个是基尼系数的公式,到这里走不下去了,没看懂是哪个符号有问题,求大神指导一下!!!谢谢啊

看你的代码,好像多了一个“)”,改成下面这样可以运行

gini <- function(x,correct=FALSE){
  n = length(x) 
  fun = function(a,b) abs(a-b)
  ifelse(correct,
         sum(outer(x,x,fun))/(2*n*(n-1)*mean(x)),
         sum(outer(x,x,fun))/2*n^2*mean(x))
}

    szcf715
    谢谢啊,我试了一下还是不可以运行,仍然显示:
    Error: unexpected symbol in "gini <- function(x,correct=FALSE){n = length(x)fun"

      niyinfeng 那我怀疑你代码中混入了不可见字符(可能是粘贴复制的时候引入的),可以试试下面两个方法。
      1. 纯手打一遍代码,然后运行看看是否报错;
      2. 使用文本编辑器(如notepad++)查看代码,看看是否存在异常字符。

        因为编辑器把换行符吃了,Win 下面的话最好是用 notepad++ 吧。复制到上面,该回车换行的换一下行。

        mingsnu 更改标题为「R unexpected symbol error

        szcf715
        谢谢啦,应该是换行符的问题,我以为直接一行就行呢,没换行。原来还需要换行。。。

        6 个月 后

        szcf715
        您好,又麻烦您了。我想做基尼系数,然后一个用公式代码,另外一个用ineq包,做出来的结果,公式中有两个不显示,给出了两个警告,这是为什么呢,下面是我做的过程,您帮我看一下,谢谢啦!

        gini <- function(x,correct=FALSE){
          n = length(x) 
          fun = function(a,b) abs(a-b)
          ifelse(correct,
                 sum(outer(x,x,fun))/(2*n*(n-1)*mean(x)),
                 sum(outer(x,x,fun))/2*n^2*mean(x))
        }
        forages.gini <- apply(forages1,2,gini,correct=T)
        
        
        Warning messages:
        1: In sum(outer(x, x, fun)) : integer overflow - use sum(as.numeric(.))
        2: In sum(outer(x, x, fun)) : integer overflow - use sum(as.numeric(.))
         forages.gini
         紫花苜蓿    披碱草      柠条    沙打旺    黑麦草          青贮玉米 
        0.7911413 0.9110174 0.9550829 0.9064644 0.8415168        NA 
             燕麦        人工牧草 
        0.8977520        NA 

          niyinfeng

          warning 意思是整数越界了。
          越界的整数会变成NA,惊不惊喜,意不意外

          改善方法就是写成

          sum(as.numeric(outer(x,x,fun)))