【发布时间】:2014-04-02 00:32:35
【问题描述】:
如何在R中初始化一个固定长度的向量??
例如,我想要一个长度为 10 的字符向量??
【问题讨论】:
标签: r data-structures vector dataframe
如何在R中初始化一个固定长度的向量??
例如,我想要一个长度为 10 的字符向量??
【问题讨论】:
标签: r data-structures vector dataframe
你问这个很好,因为在将结果分配给长对象的 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) 清晰,这是它的等价的。
【讨论】:
character(10)。
character 即可查看它们的等效性。
help("matrix")
如果要使用非零数值初始化向量,请使用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)
【讨论】: