【问题标题】:How to initialize a vector with fixed length in R如何在R中初始化一个固定长度的向量
【发布时间】:2014-04-02 00:32:35
【问题描述】:

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

例如,我想要一个长度为 10 的字符向量??

【问题讨论】:

    标签: r data-structures vector dataframe


    【解决方案1】:

    你问这个很好,因为在将结果分配给长对象的 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 即可查看它们的等效性。
    • 如何初始化一个100行4列的矩阵?
    • @ToBeGeek 你考虑过阅读文档吗? help("matrix")
    【解决方案2】:

    如果要使用非零数值初始化向量,请使用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
    

    【讨论】:

      【解决方案3】:

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

      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"",属于字符模式。

      【讨论】:

        【解决方案4】:

        为了完整起见,您可以采用所需的数据类型并添加带有元素数量的括号,如下所示:

        x &lt;- character(10)

        【讨论】:

          猜你喜欢
          • 2012-08-26
          • 1970-01-01
          • 2023-04-08
          • 2011-08-26
          • 1970-01-01
          • 2021-08-23
          • 1970-01-01
          • 1970-01-01
          • 2017-09-07
          相关资源
          最近更新 更多