我有以下R代码。我想知道我放的时候有什么不同 mat< -matrix(1:20,ncol = 5)在函数外部。我在两种情况下都得到了相同的结果。
fun<-function(x,y){
mat<-matrix(1:20, ncol=5)
for (i in 1:x){
for (j in 1:y){
mat[i,j]=rnorm(1)
return(mat)
}
}
}
fun(4,5)
以下代码按照评论和答案中的建议运行。转换为上述函数时为什么它不起作用?
mat<-matrix(1:20, ncol=5)
for(i in 1:4){
for (j in 1:5){
mat[i,j]=rnorm(1)
}
}
mat
答案 0 :(得分:1)
fun1 <- function(x,y) {
mat <- matrix(1:20, ncol=5)
mat[1:x, 1:y] <- rnorm(x*y)
mat
}
这将实现您创建一个函数的目标,该函数接受索引作为两个参数,并返回索引随机正态分布数字的矩阵。
fun1(2,1)
# [,1] [,2] [,3] [,4] [,5]
#[1,] -0.2883407 5 9 13 17
#[2,] -0.5290704 6 10 14 18
#[3,] 3.0000000 7 11 15 19
#[4,] 4.0000000 8 12 16 20
请注意,调用函数时会返回最后一行。
在函数中创建的mat
矩阵在全局环境中不可用:
mat
#Error: object 'mat' not found
每当你编写一个嵌套的for
循环作为R的新用户时,警报响应就会消失。通常有更好的方法。嵌套循环的优点是它有意义。&#34;但是,明确的逻辑进展在执行方面效率非常低。当然也有例外,但你很可能不会很快遇到它们。最好花时间学习R的编程直觉。
关于研究范围的讨论很多: