Это то, что делает rnorm (x), если x является вектором, и как я мог узнать быстрее? - PullRequest
0 голосов
/ 19 мая 2018

Я ищу ресурсы R, и я начал искать «Введение в R» здесь на r-project.org.Я сделал это и сразу же озадачился.

Мне кажется, я понял, что происходит, и мой вопрос в основном

  • Есть ли ресурсы, которые помогут мне разобраться в чем-то?как это легче?

В предисловии к введению в R предлагается начать с вводного сеанса в Приложении A, и в самом начале приведены этот код и примечание.

x <- rnorm(50)
y <- rnorm(x)

Generate two pseudo-random normal vectors of x- and y-coordinates.

В документации сказано, что (первый и единственный необязательный) параметр для rnorm - это длина вектора результата.Таким образом, x <- rnorm(50) создает вектор из 50 случайных значений из нормального распределения со средним 0 и стандартным отклонением 1.

Пока все хорошо.Но почему rnorm(x), кажется, делает то, что сделал бы y <- rnorm(50) или y <- rnorm(length(x))?Любая из этих альтернатив кажется мне более понятной.

Я думаю, что произойдет, это:

  1. Оболочка для rnorm не волнует, что за вещьx - это только что переданный в базовую функцию C указатель на C struct для x в качестве объекта R.

  2. Объекты R, представленные в C, являются структурами, за которыми следует"данные";Данные представления C вектора R вещественных чисел начинаются с двух целых чисел, первое из которых является длиной вектора.(Векторные элементы следуют за этими целыми числами.) Я узнал об этом, прочитав о внутренностях R здесь .

  3. Если функция C была написана для нахождения значения R целого числа из переданного указателя на R-объект, и она была вызвана с указателем на вектор R действительных значений, он найдет длину вектора в том месте, где он будет искать единственное целое число.

В дополнение к моему основному вопросу: «Как мне легче понять что-то подобное?»Я не возражаю, зная, правильно ли то, что, по моему мнению, происходит, и является ли тот факт, что rnorm(x) является идиоматическим R в этом контексте или более небрежным выбором.Учитывая, что он делает что-то полезное, можно ли на него полагаться или это просто удачное поведение для выражения, которое не очень хорошо определено в R?

Я привык к языкам со строгой типизацией, таким как C или SQL, которые имеют более простую для понимания (для меня) семантику и которые также имеют более полные ссылки, так что любые ссылки на R, которые ориентированы на теорию языка программирования или предназначены для людей, привыкших к строгой типизации, также были бы хорошими.

1 Ответ

0 голосов
/ 19 мая 2018

Это документированное поведение.От ?rnorm:

Использование: [...]

 rnorm(n, mean = 0, sd = 1)

Аргументы: [...]

   n: number of observations. If ‘length(n) > 1’, the length is
      taken to be the number required.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...