代码之家  ›  专栏  ›  技术社区  ›  malasi

存储循环中的值

  •  0
  • malasi  · 技术社区  · 6 年前

    我正在模拟掷骰子,希望将输出保存在单个对象中,但找不到这样做的方法。我试着找 here , here ,和 here ,但他们似乎没有回答我的问题。

    set.seed(1) 
    Twenty = for(i in 1:20){   
      trials = sample.int(6, 3, replace = TRUE)   
      print(trials)   
      i = i+1 
    }
    print(Twenty)
    

    我不明白的是为什么在函数运行后我不能回忆起它?

    我也试过用 return print 在函数中:

    Twenty = for(i in 1:20){
      trials = sample.int(6, 3, replace = TRUE)
      return(trials)
      i = i+1
    }
    print(Twenty)
    

    或者先创建一个空矩阵:

    mat = matrix(0, nrow = 20, ncol = 3)
    mat    
    for(i in 1:20){
      mat[i] = sample.int(6, 3, replace = TRUE)
      print(mat)
      i = i+1
    }
    

    但他们似乎更糟(因为我甚至没有看到审判)。

    3 回复  |  直到 6 年前
        1
  •  1
  •   Slug Pue    6 年前

    1) 循环在R中既不是函数也不是对象,因此将循环赋给变量是没有意义的

    for(i in 1:20) ,循环将递增 i 所以加上 i = i + 1 .

    上次正确执行的尝试如下所示:

    mat <- matrix(0, nrow = 20, ncol = 3)
    for(i in 1:20){
         mat[i, ] = sample.int(6, 3, replace = TRUE)
    }
    print(mat)
    

    我个人只会这么做

    matrix(sample.int(6, 20 * 3, replace = TRUE), nrow = 20)
    

    (因为所有的抽签都是独立的,并且都有替换,所以你是3次抽签20次还是仅仅60次抽签都无所谓)

        2
  •  1
  •   Parfait    6 年前

    通常,在大多数编程语言中,都不将对象赋给 for 循环,因为它们不是正式的函数对象。一种是使用循环在现有对象上进行迭代交互。但是,R保持 将迭代输出保存到与输入长度相同的对象的族。

    lapply ( sapply ( 对于矩阵输出:

    # LIST OUTPUT
    Twenty <- lapply(1:20, function(x) sample.int(6, 3, replace = TRUE))
    
    # MATRIX OUTPUT
    Twenty <- sapply(1:20, function(x) sample.int(6, 3, replace = TRUE))
    

    print(Twenty)
    

    但是因为你从不使用迭代器变量, x replicate (包装到 愚蠢的 通过一个参数可以输出一个矩阵或一个列表),它接收大小和表达式(没有序列输入或函数)参数:

    # MATRIX OUTPUT (DEFAULT)
    Twenty <- replicate(20, sample.int(6, 3, replace = TRUE))
    
    # LIST OUTPUT
    Twenty <- replicate(20, sample.int(6, 3, replace = TRUE), simplify = FALSE)
    
        3
  •  0
  •   Jim Chen    6 年前

    Twenty=list()
    for(i in 1:20){
      Twenty[[i]] = sample.int(6, 3, replace = TRUE)
    }