如何在R中初始化一个具有固定长度的向量

56
如何在R中初始化固定长度的向量?例如,我想要一个长度为10的字符型向量?
4个回答

74

很好你问这个问题,因为在分配结果给长对象的for循环之前预先分配长向量可以更加高效,因为不需要连续地增加向量长度。

?vector

X <- vector(mode="character", length=10)
这将给你空字符串,这些字符串被打印为两个相邻的双引号,但请注意,值本身中没有双引号字符。这只是 print.default 显示值的副作用。它们可以通过位置进行索引。字符数不会受到限制,因此如果您期望获得一个包含10个字符的元素,则会感到失望。
>  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

在R中,技术上来说,列表是“向量”,因此这是使用for循环构建列表的推荐(甚至必要)做法:

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

@Tom 提醒我们,'mode'的默认值是逻辑型,并且R拥有相当丰富的自动强制类型转换方法。尽管我发现他提到的 vector(,10) 比等价的 logical(10) 更不清晰。


14
或者只需使用 character(10) - Thomas
1
好的。只需键入 character,查看它们的等价性。 - IRTFM
1
如何初始化一个100行,4列的矩阵? - ToBeGeek
10
你考虑过阅读文档吗?help("matrix") - Roland

39

如果你想用数字值来初始化一个向量而不是零,请使用rep

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

这将为您提供:

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

只要您不希望得到一个空向量,这个语法对于大多数数据类型来说很好很容易。 - M.L.

12

最容易记住的初始化方法是

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

vec的值默认为"[1] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE"(逻辑模式)。

但是在设置字符值后,比如

vec[2] = 'abc'

vec变成了:"FALSE" "abc" "FALSE" "FALSE" "FALSE" "FALSE" "FALSE" "FALSE" "FALSE" "FALSE",它是字符模式。


6

为了完整起见,你只需取所需的数据类型并添加与元素数量相对应的括号,如下所示:

x <- character(10)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接