[R] Silhouette function problem

David Winsemius dwinsemius at comcast.net
Fri Dec 31 18:20:32 CET 2010


On Dec 31, 2010, at 10:34 AM, ADias wrote:

>
>
> ADias wrote:
>>
>> Hi,
>>
>> I am using the code below to get a plot that will show me on the X  
>> axis
>> the number of clusters and on the Y axis the cluster average widths.
>> However I am getting this error:
>>
>> Error in summary(silhouette(cutree(d, x), dist(iris[, -5]))) 
>> $si.summary :
>>  $ operator is invalid for atomic vectors
>>
>> the code I am using is:
>>
>> avgs<-sapply(1:20,function(x)
>> summary(silhouette(cutree(d,x),
>> dist(iris[,-5])))$si.summary[4])
>>
>> I think the problem is on the si.summary.
>>
>> What can I do to solve this problem?
>>
>> thank you
>>
>> Regards,
>> A Dias.
>>
>
> Hi,
>
> I have made this script
>
> library(cluster)
> d<-hclust(dist(iris[,-5]))
> avgs<-sapply(1:20,function(x)
> summary(silhouette(cutree(d,x),
> dist(iris[,-5]))))
> str(avgs)
>
> I need $ avg.width  but I don't know how to take that out from the  
> object
> avgs.

Do these examples of accessing <something> resembling what you are  
asking in that object help?

 > avgs[[2]]$clus.avg.widths
         1         2
0.3861393 0.6566469
 > avgs[[7]]$clus.avg.widths
         1         2         3         4         5         6         7
0.3489107 0.2389611 0.2380363 0.3753805 0.6617769 0.4456561 0.3185074


> The mode from avgs is "list" but it does not work as a normal list.

What do you meant when you write "it does not work as a normal list"?  
Admittedly it is a name-less list, which seems a bit non-traditional,  
but accessing as avgs[[1]] or avgs[[2]] gives appropriate values. (And  
_you_ are the one responsible for creating this nameless object.)  If  
you just look at the beginning of the str results:

 > str(avgs)
List of 20
  $ :Classes 'summaryDefault', 'table'  Named chr [1:2] "logical" "1"
   .. ..- attr(*, "names")= chr [1:2] "Mode" "NA's"
  $ :List of 7
   ..$ si.summary     :Classes 'summaryDefault', 'table'  Named num  
[1:6] -0.435 0.561 0.657 0.516 0.687 ...
   .. .. ..- attr(*, "names")= chr [1:6] "Min." "1st Qu." "Median"  
"Mean" ...
<snipped remainder of output>

You can then access the first leaf of the second element:

avgs[[2]]$si.summary
    Min. 1st Qu.  Median    Mean 3rd Qu.    Max.
-0.4349  0.5615  0.6574  0.5160  0.6867  0.7525


-- 
David.


>
> Any help would be apreciated.
>
> thanks
> A. Dias
> -- 
> View this message in context: http://r.789695.n4.nabble.com/Silhouette-function-problem-tp3169027p3169522.html
> Sent from the R help mailing list archive at Nabble.com.
>
> ______________________________________________
> R-help at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
> and provide commented, minimal, self-contained, reproducible code.

David Winsemius, MD
West Hartford, CT



More information about the R-help mailing list