从用户定义的函数返回多个值
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
,你可能也想使用replace
,sample(vec1, i, replace=TRUE)
。接下来你希望b
成为一个列表(b <- list()
),所以b[[i]] <- 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))
【讨论】:
以上是关于从用户定义的函数返回多个值的主要内容,如果未能解决你的问题,请参考以下文章