How to initialize a vector with fixed length in R

238,196

Solution 1

It's good that you ask because pre-allocating long vectors before for-loops that will be assigning results to long objects are made more efficient by not needing to successively lengthen vectors.

?vector

X <- vector(mode="character", length=10)

This will give you empty strings which get printed as two adjacent double quotes, but be aware that there are no double-quote characters in the values themselves. That's just a side-effect of how print.default displays the values. They can be indexed by location. The number of characters will not be restricted, so if you were expecting to get 10 character element you will be disappointed.

>  X[5] <- "character element in 5th position"

>  X
 [1] ""                                  ""                                 
 [3] ""                                  ""                                 
 [5] "character element in 5th position" ""                                 
 [7] ""                                  ""                                 
 [9] ""                                  "" 
>  nchar(X)
 [1]  0  0  0  0 33  0  0  0  0  0

> length(X)
[1] 10

Technically, lists are "vectors" in R, so this is a recommended (even necessary) practice for constructing lists with for-loops:

obj <- list( length(inp_vec) )
for ( i in seq_along(inp_vec) ){
       obj[[i]] <- some_func( inp_vec[i] )
       }

@Tom reminds us that the default for 'mode' is logical and that R has a fairly rich set of automatic coercion methods, although I find his suggestion vector(,10) to be less clear than would be logical(10) which is its equivalent.

Solution 2

If you want to initialize a vector with numeric values other than zero, use rep

n <- 10
v <- rep(0.05, n)
v

which will give you:

[1] 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05 0.05

Solution 3

The initialization method easiest to remember is

vec = vector(,10); #the same as "vec = vector(length = 10);"

The values of vec are: "[1] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE" (logical mode) by default.

But after setting a character value, like

vec[2] = 'abc'

vec becomes: "FALSE" "abc" "FALSE" "FALSE" "FALSE" "FALSE" "FALSE" "FALSE" "FALSE" "FALSE"", which is of the character mode.

Solution 4

Just for the sake of completeness you can just take the wanted data type and add brackets with the number of elements like so:

x <- character(10)

Share:
238,196
ToBeGeek
Author by

ToBeGeek

Updated on July 29, 2021

Comments

  • ToBeGeek
    ToBeGeek almost 3 years

    How to initialize a vector with fixed length in R ??

    For example, I want a vector of characters with length of 10??

  • Thomas
    Thomas about 10 years
    Or just character(10).
  • IRTFM
    IRTFM about 10 years
    Right. Just type character to see how these are equivalent.
  • ToBeGeek
    ToBeGeek about 10 years
    How to initialise a matrix with 100 rows, 4 columns ?
  • Roland
    Roland about 10 years
    @ToBeGeek Have you considered reading the documentation? help("matrix")