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