R粘贴n个值

时间:2014-03-20 06:16:04

标签: r function loops for-loop paste

我刚开始学习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不是一个字符串。对不起,如果听起来真的很蠢。

2 个答案:

答案 0 :(得分:1)

如果需要循环,那么:

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循环中,您始终需要将每个循环的输出分配到对象中。请注意,我没有在引号中添加标签,因为它变成了一个字符串“label”,并且从不使用通过调用函数传入的标签字符串。

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

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

答案 1 :(得分:0)

根本不要忘记@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