2015-02-27 5 views
2

я произвел следующие случайные выборки в 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) и соответствующие вероятности х, у, г, п

samplegenerator <- function(size, x, y, z, n){ 
    ... 
} 

после работы функции пользователь должен иметь 4 образцов, хранящихся в его рабочем каталоге под соответствующими названиями (sample1, sample2, sample3, sample4) так же, как он если бы он выполнял функцию выборки и сохранял вывод, как выше.

Поскольку я новичок в R, с этим я боролся. Какие-либо предложения?

Заранее благодарен!

+1

Зачем вы хотите это сделать? Почему бы не сохранить его в 'list' или' matrix'? – A5C1D2H2I1M1N2O1R2T1

ответ

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 для имена переменных как указано.

Однако задайте себе вопрос, почему вы хотите это сделать. Такое поведение может быть хаккой и беспорядок в вашем рабочем пространстве, в то время как может быть более элегантное решение.

+0

Спасибо за предложения! Что касается вопроса, почему я хочу это сделать: он является частью модели, которая будет использоваться людьми, которые не имеют абсолютно никакого программирования. Я хочу сделать это как можно проще. Они должны вводить значения без необходимости понимать эту функцию. – Sebastian

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 
Смежные вопросы