【问题标题】:Appending a vector in R在 R 中附加一个向量
【发布时间】:2020-12-21 19:43:28
【问题描述】:

我正在尝试编写一个简单的函数,该函数从一个向量中获取随机样本,将其打印出来,然后更新之前打印的样本列表。但是,我拥有的功能不断替换以前的项目。这是函数的抽象版本:

a <- rep(1:10)

b <- vector(length = 0)

fun <- function() {
  s <- sample(a, 1)
  b <- c(b,s)
  
  print(paste("Sample:", s)) 
  print(paste("Selected so far:",b))

}

fun() 

[1] "Sample: 8"
[1] "Selected so far: 8"

fun()

[1] "Sample: 6"
[1] "Selected so far: 6" # should be 8 6  

有什么建议吗?这感觉应该很简单。

【问题讨论】:

    标签: r append


    【解决方案1】:

    您需要使用&lt;&lt;- 而不是&lt;-

    &lt;&lt;- 运算符通常只用在函数中,它会导致通过父环境搜索正在分配的变量的现有定义。

    fun <- function() {
      s <- sample(a, 1)
      b <<- c(b,s)
      print(paste("Sample:", s)) 
      print(paste("Selected so far:",b))
    }
    fun()
    #[1] "Sample: 7"
    #[1] "Selected so far: 7"
    fun()
    #[1] "Sample: 3"
    #[1] "Selected so far: 7" "Selected so far: 3"
    

    【讨论】:

    • 谢谢,我假设避免重复“到目前为止已选择:”我可以执行单独的打印功能吗?
    • 你可以试试paste("Selected so far:", paste(b, collapse = ", "))
    【解决方案2】:

    如果你想避免超级赋值(通常是个好主意),你可以让你的函数接受一个参数。

    fun <- function(b) {
      s <- sample(a, 1)
      b <- c(b,s)
      
      print(paste("Sample:", s)) 
      print(paste("Selected so far:",b))
      return(b)
    }
    
    b <- fun(b)
    b <- fun(b)
    

    【讨论】:

      猜你喜欢
      • 2020-01-30
      • 2019-11-23
      • 1970-01-01
      • 2018-10-02
      • 2014-04-09
      • 2015-03-31
      • 1970-01-01
      • 2018-06-21
      • 2011-01-28
      相关资源
      最近更新 更多