2016-10-18 2 views
0

Пусть простой код:Как сделать статическую переменную динамикой?

> sample(2,5,replace=TRUE) 
[1] 2 1 1 1 2 

Когда он вызывается снова может принимать другие переменные:

> sample(2,5,replace=TRUE) 
    [1] 1 2 2 1 2 

Однако, при присваивании переменной она прилипает к одному предопределенный набор:

> n <- (sample(2,5,replace=TRUE)) 
> n 
[1] 1 1 2 1 1 
> n 
[1] 1 1 2 1 1 
> n 
[1] 1 1 2 1 1 

Как мы можем изменить n переменную n?

+1

Привет, добро пожаловать на SO. Это очень обескураживает. Ваш код станет очень трудным для чтения и отладки в будущем для вас или людей, которые прочитают код. Просто определите функцию, чтобы вы могли ее снова вызвать. – Stereo

+0

Стерео верно, и, как другие упоминали дальше, идиоматический способ сделать это в R - написать для него функцию. –

ответ

3

Я на стороне пошагового некоторые вопросы о том, почему вы хотите сделать это, но вот один способ это несколько .... продвинутый:

makeActiveBinding("n",function() sample(2,5,replace = TRUE),.GlobalEnv) 
> n 
[1] 2 2 1 2 1 
> n 
[1] 1 2 2 2 2 
> n 
[1] 2 1 1 1 1 

То, что здесь происходит, что n создается в глобальной среде, а затем связан с функцией, так что всякий раз, когда требуется значение для n, она вызывает функцию.

+0

приятное решение, но почему о, почему некоторые хотят это сделать ?! – Stereo

+1

@Stereo Я согласен, мой ответ по умолчанию должен был просто написать функцию, например, что сделал DMC. Я просто подумал, что было бы интересно продемонстрировать что-то более экзотичное. – joran

+0

Отлично! Однако слишком продвинутый ... –

2

Создание функции будет идиоматическое R подход:

samp <- function() sample(2, 5, replace = TRUE) 

samp() 
[1] 2 1 2 2 2 
samp() 
[1] 1 2 2 1 1 
+0

Спасибо за ответ! - также большое понимание, но я смотрел специально для создания нефункциональной переменной, которая обладала теми же свойствами, что и функция здесь –

0

... или просто позвоните образца() несколько раз ...

> n <- sample(2,5, replace=TRUE) 
> n 
[1] 1 2 2 1 2 
> n <- sample(2,5, replace=TRUE) 
> n 
[1] 2 2 2 1 1 
Смежные вопросы