RKMeans()

Calls the k-means algorithm and returns the cluster vector and cluster center matrix.

Synopsis

int RKMeans( const dyn_dyn_float vals, int clusters, dyn_int& clusterVec, dyn_dyn_float& clusterCen, bool scale, [ int nstart = 25], int userData = 0);

Parameter Description
vals Matrix of values.
clusters Number of clusters to be calculated.
clusterVec Return parameter of cluster ID vector.
clusterCen Return parameter of cluster center matrix. Each cluster is represented by a cluster center. The coordinates of a cluster center represent the characteristic values of each cluster.
scale

Scale factor. In order to compare values of different units and value ranges (for example, temperature, speed, current etc.) with each other, the values should be scaled (normalized).

The RKMeans function scales the values when you set the "scale" parameter to TRUE. Since in most cases values of different units are used, it is recommended to set the value to TRUE.

nstart Number of start tries for the cluster calculation. To obtain stable results, you can specify a higher start number for the nStart. Thus, the algorithm is calculated as many times as specified via the parameter in order to return the best possible results.
userData User data of the function call. The user data variable can be set to an integer value and be used to detect errors when calling R functions. Set the variable to an integer value and when the function is called and an error occurs, the specified integer value is returned.

Return Value

The function returns 0 if it was successfully executed.

Description

Calls the k-means algorithm and returns the cluster vector and cluster center matrix.

Example

The example calls the k-means algorithm and returns the cluster vector and cluster center matrix.

#uses "CtrlR"
main()
{
  dyn_float df1 = makeDynFloat(31,31,33,32,34,33,32,35,29,34,38,40,37,38,36,36,36,39,38,40,35,32,34,32,34,29,29,28,31,28,30,34,33,28,31,32,33,33,33,35,36,36,40,38,40,37,40,38,40,38);
  dyn_float df2 = makeDynFloat(401,381,382,392,406,372,361,405,392,399,350,342,346,354,304,345,320,317,356,323,386,406,405,396,400,401,365,400,391,398,362,368,363,373,389,370,406,386,402,367,379,380,406,389,374,379,399,406,377,407);
  dyn_float df3 = makeDynFloat(89,85,90,90,99,88,83,102,81,97,95,98,92,96,78,89,83,89,97,93,97,93,99,91,97,83,76,80,87,80,78,90,86,75,86,85,96,91,95,92,98,98,116,106,107,100,114,111,108,111);
  dyn_float df4 = makeDynFloat(63,97,73,73,75,75,80,93,96,77,86,81,85,83,74,68,73,63,86,60,85,93,90,79,79,68,81,66,65,95,96,71,72,81,73,63,84,75,67,77,73,85,100,95,74,71,97,98,67,63);
  dyn_float df5 = makeDynFloat(4,10,10,-4,8,8,-3,3,8,9,6,7,0,3,10,8,3,9,10,8,9,-3,6,9,1,3,6,-4,0,-2,-2,7,6,3,-2,6,8,8,0,3,-3,2,3,10,6,1,4,4,2,8);
  dyn_float df6 = makeDynFloat(35,32,34,34,38,34,33,36,31,30,37,39,39,34,33,39,30,33,37,35,44,40,41,41,43,44,44,40,42,45,37,30,30,33,33,35,36,39,36,34,34,30,32,30,30,32,31,34,35,38);
  dyn_float df7 = makeDynFloat(35,32,34,34,38,34,33,36,31,30,37,39,39,34,33,39,30,33,37,35,44,40,41,41,43,44,44,40,42,45,37,30,30,33,33,35,36,39,36,34,34,30,32,30,30,32,31,34,35,38);
  string err_desc;
  int userData = 4;
  dyn_dyn_float ddf1;
  dynAppend(ddf1,df1);
  dynAppend(ddf1,df2);
  dynAppend(ddf1,df3);
  dynAppend(ddf1,df4);
  dynAppend(ddf1,df5);
  dynAppend(ddf1,df6);
  dynAppend(ddf1,df7);
  DebugN("Content of the ddf:", ddf1);
  /* !!!Function calls of RKMEans(Calls the k-means algorithm and returns the cluster vector and cluster center matrix.) and RCalcLabels (Determines the cluster label vector and the
  associated center distance vector based on a value matrix and a cluster center matrix.*/
  int nStart = 25;/* Number of start tries for the cluster calculation. */
  dyn_int clusterVec; /* Return parameter of the cluster ID vector */
  dyn_dyn_float clusterCen; /* Return parameter of the cluster center matrix */
  dyn_float centerDist; /* Return parameter of the center distance vector associated to the cluster ID vector */
  bool scale = TRUE; //scale factor
  int x = RKMeans(ddf1, 5, clusterVec, clusterCen, scale, nStart, userData); /* Function call (5 = number of clusters) */
  DebugN("ClusterCen",clusterCen);
  int i;
  i = RCalcLabels(ddf1, clusterCen, clusterVec, centerDist);
  //Function call of RCalcLabels
  DebugN("clusterVec:", clusterVec, "centerDist:",centerDist);
}

Assignment

R Functions

Availability

R Control Extension