从用户定义的函数返回多个值

Posted

技术标签:

【中文标题】从用户定义的函数返回多个值【英文标题】: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,这个解释帮助很大。 【参考方案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))

【讨论】:

以上是关于从用户定义的函数返回多个值的主要内容,如果未能解决你的问题,请参考以下文章

从函数(未定义)jQuery / ifelse返回多个值

用户定义的函数在sql中返回多个值

R用户定义函数,返回多个类型对象

使用 SQL 查询从 BigQuery 用户定义函数返回值

T-SQL编程 —— 用户自定义函数(标量函数)

如何从matlab中用户定义的函数返回一个值,该函数的回调在uicontrol中指定