将示例函数集成到R中我自己的函数中

时间:2015-02-27 10:50:06

标签: r

我在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新手,所以我一直在努力解决这个问题。有什么建议吗?

提前致谢!

2 个答案:

答案 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和混乱你的工作区,而可能有一个更优雅的解决方案。