【问题标题】:Return multiple values from a user defined function从用户定义的函数返回多个值
【发布时间】:2021-03-21 06:18:02
【问题描述】:

我正在尝试在 R 中创建一个大约 5000 行和 5-6 列的虚拟数据集。我试图通过为每一列创建随机函数来实现它。但是调用函数只返回一个值。我试图实现它的代码如下:-

Vertical <- function(a) {
  vec1 <- c('HiTech', 'BFSI', 'Insurance', 'Retail', 'Ecomm', 'Media', 'Govt')
  for(i in 1:a) {
    b <- sample(vec1,1)
    return(b)
  }
}

n <- Vertical(5000)

我需要变量“n”来返回我无法实现的值范围(总共 5000)。请求一些帮助。 谢谢。

【问题讨论】:

  • 不应该是 sample(vec1, i) , i 而不是 1?
  • 正如 Pkumar 提到的,你想使用i,你可能也想使用replacesample(vec1, i, replace=TRUE)。接下来你希望b 成为一个列表(b &lt;- list()),所以b[[i]] &lt;- sample(vec1, i, replace=TRUE)。这样您就可以将return 语句移到for 循环之外。最后,您可能不想使用循环,但这是一个不同的讨论。
  • 谢谢 Pkumar 和 William,这个解释帮助很大。

标签: r user-defined-functions


【解决方案1】:

您可以将所有值一起采样并将它们放入矩阵/data.frame 中。

Vertical <- function(nr, nc) {
  vec1 <- c('HiTech', 'BFSI', 'Insurance', 'Retail', 'Ecomm', 'Media', 'Govt')
  as.data.frame(matrix(sample(vec1, nr * nc, replace = TRUE), nr, nc))
}

Vertical(6, 3)

#         V1     V2        V3
#1      BFSI HiTech      Govt
#2 Insurance  Ecomm Insurance
#3     Media   Govt    Retail
#4     Ecomm  Ecomm      BFSI
#5    HiTech   Govt     Ecomm
#6      Govt   Govt    Retail

【讨论】:

  • 谢谢你,Rounak,这帮助很大。
【解决方案2】:

怎么样:

vec1 <- c('HiTech', 'BFSI', 'Insurance', 'Retail', 'Ecomm', 'Media', 'Govt')
b <- lapply(1:10, function(y) sample(vec1, y, replace=TRUE))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-07-22
    • 2022-01-24
    • 2018-08-29
    • 1970-01-01
    • 2018-01-01
    • 2013-02-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多