Я ищу ресурсы 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))
?Любая из этих альтернатив кажется мне более понятной.
Я думаю, что произойдет, это:
Оболочка для rnorm
не волнует, что за вещьx
- это только что переданный в базовую функцию C указатель на C struct
для x
в качестве объекта R.
Объекты R, представленные в C, являются структурами, за которыми следует"данные";Данные представления C вектора R вещественных чисел начинаются с двух целых чисел, первое из которых является длиной вектора.(Векторные элементы следуют за этими целыми числами.) Я узнал об этом, прочитав о внутренностях R здесь .
Если функция C была написана для нахождения значения R целого числа из переданного указателя на R-объект, и она была вызвана с указателем на вектор R действительных значений, он найдет длину вектора в том месте, где он будет искать единственное целое число.
В дополнение к моему основному вопросу: «Как мне легче понять что-то подобное?»Я не возражаю, зная, правильно ли то, что, по моему мнению, происходит, и является ли тот факт, что rnorm(x)
является идиоматическим R в этом контексте или более небрежным выбором.Учитывая, что он делает что-то полезное, можно ли на него полагаться или это просто удачное поведение для выражения, которое не очень хорошо определено в R?
Я привык к языкам со строгой типизацией, таким как C или SQL, которые имеют более простую для понимания (для меня) семантику и которые также имеют более полные ссылки, так что любые ссылки на R, которые ориентированы на теорию языка программирования или предназначены для людей, привыкших к строгой типизации, также были бы хорошими.