我在R中生成了以下随机样本:
sample1 <- sample(c(TRUE, FALSE), size, replace= TRUE, c(x, 1-x))
sample2 <- sample(c(TRUE, FALSE), size, replace= TRUE, c(y, 1-y))
sample3 <- sample(c(TRUE, FALSE), size, replace= TRUE, c(z, 1-z))
sample4 <- sample(c(TRUE, FALSE), size, replace= TRUE, c(n, 1-n))
现在我想编写一个函数,用户只需要输入大小(所有4都相同)和相应的概率x,y,z,n
samplegenerator <- function(size, x, y, z, n){
...
}
在运行该功能之后,用户应该在他的工作目录中将4个样本存储在各自的标题下(sample1,sample2,sample3,sample4),就像他将运行样本函数并存储输出一样。
因为我是R新手,所以我一直在努力解决这个问题。有什么建议吗?
提前致谢!
答案 0 :(得分:1)
您可以使用list2env
来获取全局环境中的“示例”对象。
samplegenerator <- function(size, ...){
args <- as.list(match.call())[-(1:2)]
lst <- lapply(args, function(x) sample(c(TRUE, FALSE),
size, replace=TRUE, c(x, 1-x)))
list2env(setNames(lst, paste0('sample', seq_along(args))), envir=.GlobalEnv)
}
samplegenerator(20, 0.3, 0.4,0.5,0.9)
sample3
#[1] TRUE TRUE FALSE TRUE FALSE FALSE TRUE FALSE TRUE TRUE FALSE TRUE
#[13] TRUE TRUE TRUE TRUE TRUE FALSE TRUE TRUE
sample4
# [1] TRUE TRUE TRUE TRUE TRUE FALSE TRUE TRUE TRUE TRUE TRUE TRUE
#[13] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
答案 1 :(得分:0)
您的问题有一个直截了当的答案,就是将assign()
用于全球环境,如下所示:
samplegenerator <- function(size, x, y, z, n){
sample1 <- sample(c(TRUE, FALSE), size, replace= TRUE, c(x, 1-x))
sample2 <- sample(c(TRUE, FALSE), size, replace= TRUE, c(y, 1-y))
sample3 <- sample(c(TRUE, FALSE), size, replace= TRUE, c(z, 1-z))
sample4 <- sample(c(TRUE, FALSE), size, replace= TRUE, c(n, 1-n))
assign("sample1", sample1, envir = .GlobalEnv)
assign("sample2", sample2, envir = .GlobalEnv)
assign("sample3", sample3, envir = .GlobalEnv)
assign("sample4", sample4, envir = .GlobalEnv)
}
x <- .3
y <- .6
z <- .1
n <- .9
size <- 10
samplegenerator(size, x, y, z, n)
这在全局环境中将值样本1-4设置为指定的变量名称。
但是,问问自己为什么要这样做的问题。这种行为可能是一种hacky和混乱你的工作区,而可能有一个更优雅的解决方案。