【问题标题】:R pasting over n valuesR粘贴n个值
【发布时间】:2014-03-20 06:16:04
【问题描述】:

我刚开始学习 R,不知何故这对我来说没有意义。

createVector3  = function(label, n) {
    # Implement this function body so that it returns
    # the character vector (label 1, label 2, ..., label n), where
    # label is a string and n is an integer.
   for (i in n) {paste("label", i, sep = " ")}
   }

我知道我应该做一个 for 循环,但我只是看不到在里面放什么,因为 n 不是字符串。抱歉,如果这听起来很愚蠢。

【问题讨论】:

    标签: r function loops for-loop paste


    【解决方案1】:

    如果需要for循环则:

    createVector3  = function(label, n) {
      # Implement this function body so that it returns
      # the character vector (label 1, label 2, ..., label n), where
      # label is a string and n is an integer.
      res <- vector(length=n)
      for (i in 1:n) {res[i] <- paste(label, i, sep = " ")}
      return(res)
    }
    

    在 for 循环中,您总是需要将每个循环的输出分配给一个对象。请注意,我没有在引号中添加标签,因为它变成了字符串“标签”,并且从不使用您通过调用函数传入的标签字符串。

    但是你不需要为此创建一个函数,它做同样的事情:

    paste("label",1:9,sep=" ")
    

    【讨论】:

      【解决方案2】:

      完全不要从@JeremyS 的答案中删除。他的答案正是你想要的。但是,如果您继续创建没有循环的函数,您可以通过尝试apply 函数并使用您的函数创建对象(并且可能在此过程中给您的老师留下深刻印象)来进一步超越最低限度。

      这里有几个例子。

      > createVector3  <- function(label, n) {
            res <- paste(label, 1:n, sep = " ")
            return(res)
        }
      
      > createVector3("label", 5)
      ## [1] "label 1" "label 2" "label 3" "label 4" "label 5"
      
      > sapply(c("lab", "label", "variable"), function(x) createVector3(x, 5))
      ##      lab     label     variable    
      ## [1,] "lab 1" "label 1" "variable 1"
      ## [2,] "lab 2" "label 2" "variable 2"
      ## [3,] "lab 3" "label 3" "variable 3"
      ## [4,] "lab 4" "label 4" "variable 4"
      ## [5,] "lab 5" "label 5" "variable 5"
      
      > mapply(createVector3, c("lab", "label", "variable"), 1:3)
      ## $lab
      ## [1] "lab 1"
      
      ## $label
      ## [1] "label 1" "label 2"
      
      ## $variable
      ## [1] "variable 1" "variable 2" "variable 3"
      
      > mat <- matrix(c(1:30), nrow = 5, ncol = 3)
      > colnames(mat) <- createVector3("Col", 3)
      > rownames(mat) <- createVector3("Row", 5)
      > mat
      ##       Col 1 Col 2 Col 3
      ## Row 1     1     6    11
      ## Row 2     2     7    12
      ## Row 3     3     8    13
      ## Row 4     4     9    14
      ## Row 5     5    10    15
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-03-01
        • 1970-01-01
        • 2023-01-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-04-26
        相关资源
        最近更新 更多