# [R] easy question

John Fox jfox at mcmaster.ca
Tue Apr 29 13:27:23 CEST 2003

```Dear Fabrizio

At 12:07 PM 4/29/2003 +0200, De Amicis Fabrizio (G.I.T.) wrote:
>Dear R.List,
>I am starting to use R. I have an easy question. In a dataset of 15
>variables, I am not able run correctly the index i of the do loop.
>Do you have any suggestion?
>
>NC <- function(x)
>
>     for (i in 1:15) {
>     print(dim(table(dt[,"Vi"])))
>
>}
>

The short answer is that you need to paste the number in i to "V" in order
to create a proper column index. I assume that the columns of dt are named
"V1", ..., "V15":

print(dim(table(dt[,paste("V",i,sep="")])))

Alternatively, you could use something like

for (i in paste("V",1:15,sep="")) print(dim(table(dt[,i])))

or even more simply, just index the columns by number

for (i in 1:15) print(dim(table(x[,i])))

Some other points, however:

(1) The argument to your function is x, but you're indexing a variable
called dt.

(2) A simpler approach to counting the unique elements in each column is

apply(dt, 2, function(x) length(unique(x)))

(3) Since this apparently applies to a particular matrix or data frame, why
write a function to perform the operation?

I hope that this helps,
John

-----------------------------------------------------
John Fox
Department of Sociology
McMaster University