如何在R中初始化固定长度的向量?例如,我想要一个长度为10的字符型向量?
很好你问这个问题,因为在分配结果给长对象的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)
更不清晰。
如果你想用数字值来初始化一个向量而不是零,请使用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
最容易记住的初始化方法是
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",它是字符模式。
为了完整起见,你只需取所需的数据类型并添加与元素数量相对应的括号,如下所示:
x <- character(10)
character(10)
。 - Thomascharacter
,查看它们的等价性。 - IRTFMhelp("matrix")
- Roland