Почему нет выходных данных из моей функции в Rstudio? - PullRequest
1 голос
/ 05 июня 2019

Я новичок в Rstudio, поэтому могу задавать глупые вопросы. Когда я набираю эту функцию: my.bivariate.dice.matrix(Nreps=2, Nsample = 5) Я получаю

##      [,1] [,2]
## [1,]    5   10
## [2,]    2    6
## [3,]    5    5
## [4,]    5    6
## [5,]    7    5

с моей консоли.

Но когда я набираю эту функцию:

my.bivariate.dice <- function(die1=1:6, die2=1:6, prob1=NULL,prob2=NULL,Nsample=20) {
  roll1 <- sample(die1, prob=prob1, replace = TRUE, size = Nsample)
  roll2 <- sample(die2, prob=prob2, replace = TRUE, size = Nsample)
  my.result <- roll1 + roll2
  return(my.result)
}

Я получаю копию точно такой же функции в разделе консоли.

> my.bivariate.dice <- function(die1=1:6, die2=1:6, prob1=NULL,prob2=NULL,Nsample=20) {
+   roll1 <- sample(die1, prob=prob1, replace = TRUE, size = Nsample)
+   roll2 <- sample(die2, prob=prob2, replace = TRUE, size = Nsample)
+   my.result <- roll1 + roll2
+   return(my.result)
+ }

Выходные данные не отображаются.


Мой первый вопрос: как получить вывод из второй функции? Какой шаг я сделал неправильно или пропустил? Или это должно быть так в консоли?

Всякий раз, когда я набираю view(my.result), sample(my.result), plot(my result), я получаю что-то вроде ниже:

Error in View: object 'my.result' not found

Но если я переключу его на view (my.bivariate.dice()), sample (my.bivariate.dice()) и так далее, я получу то, что хочу, соответственно в виде диаграммы или графика.

Итак, мой второй вопрос: почему можно проверить my.bivariate.dice(), в то время как my.result или любой случайный символ / число, вставленный в функцию, не может быть найден.

Большое спасибо за ответы на мои вопросы.

1 Ответ

0 голосов
/ 05 июня 2019

Объекты должны быть определены для использования.

Если я наберу x в консоли R (в новом сеансе R), я получу ошибку:

> x
`Error: object 'x' not found`

Потому что R не знает, что такое x.Но если я сначала определю x (присвоив ему значение с помощью <- или =), то я смогу увидеть его значение очень хорошо:

Сначала определим его (обратите внимание, что результат не печатается, толькокоманда назначения, которую я запускаю):

> x <- 5

Теперь мы можем видеть x или использовать ее:

> x
[1] 5

> sqrt(x)
[1] 2.236068

Точно так же, в моем новом сеансе Rфункция my.bivariate.dice не существует.Если я попытаюсь вызвать его, я получу сообщение об ошибке:

> my.bivariate.dice(Nsample = 5)
Error in my.bivariate.dice(Nsample = 5) : 
  could not find function "my.bivariate.dice"

Но если я сначала определю его, используя <-, то я смогу использовать его:

> my.bivariate.dice <- function(die1=1:6, die2=1:6, prob1=NULL,prob2=NULL,Nsample=20) {
+   roll1 <- sample(die1, prob=prob1, replace = TRUE, size = Nsample)
+   roll2 <- sample(die2, prob=prob2, replace = TRUE, size = Nsample)
+   my.result <- roll1 + roll2
+   return(my.result)
+ }

(+ в начале строки - это способ консоли R сообщить вам, что строка продолжается от приведенной выше. Вы не должны включать + s в свой код, они добавляются консолью, простокак > в начале первой строки)

Так же, как ничего не печатается, когда я назначил x <- 5 выше, ничего не печатается, когда я назначаю my.bivariate.dice <- ... здесь.Но теперь я могу вызвать функцию:

> my.bivariate.dice(Nsample = 5)
[1] 6 3 6 9 8

Если я хочу использовать этот результат позже, мне нужно присвоить его объекту, используя <- или =:

> my.result = my.bivariate.dice(Nsample = 5)

Неважно, какие имена используются внутри функции, я могу назвать результат result или my.result или x или jerry или любое другое имя, которое я хочу.И теперь, когда я присвоил значения, которые я хочу, my.result, я могу использовать my.result с View() (обратите внимание на заглавную V) или любую другую функцию.

Обратите внимание, что это очень хорошая вещь , что функция не выбрала мне имя.Я не хочу отслеживать, какие имена используются внутри функций.Выше, когда я запустил команду sqrt(x), если бы я хотел сохранить этот результат, я бы хотел выбрать свое собственное имя, my.sqrt <- sqrt(x) --- и вот как работает R.Я не хочу заглядывать внутрь sqrt() или в документацию, чтобы выяснить, как называется результат, я выбираю любое имя, которое хочу.

...