Как R определяет, является ли переменная базой данных или вектором в одном выражении?

#r #function #vector #data-science

#r #функция #вектор #наука о данных

Вопрос:

Я изучаю онлайн-курс R data science (dataquest). В нем меня просят выполнить функции для фрейма данных о чемпионате мира по футболу 2014 года. Каждая строка — это отдельная игра. Меня просят создать функцию, которая принимает количество забитых голов в каждом матче и возвращает вектор, где каждая база данных представляет собой процент от общего количества забитых голов в соревновании. Код (и сертифицированный правильный ответ ниже)

 goals_percen <- function(x){
    x/sum(x)*100
}

home_goals_percentage <- goals_percen(scores$home_goals)
away_goals_percentage <- goals_percen(scores$away_goals)
 

В python я должен был бы написать что-то вроде

 def goals_percen(series):
    total = sum(series)
    result = []
    for i in series:
        result.append(i/total)
 

Или некоторый эквивалентный код с использованием panda .apply()

Мой вопрос в том, как интерпретатор анализирует выражение x/sum(x) ? Для того, чтобы функция работала, она должна обрабатывать первую x как отдельную базу данных (или наблюдение), а x in sum(x) — как весь вектор.

Комментарии:

1. сумма (x) является скаляром. таким образом, x / sum (x) — это просто компонентный процент, который компонент составляет от общей суммы. Возможно, проще, чем код python.

2. В R это называется «векторизацией» (и я уверен, что Python pandas или numpy делают что-то подобное), где множество операций R будет автоматически интерпретироваться при поэлементных вычислениях. Например, c(1,2,3) / 5 указывает R разделить каждый элемент на 5. Или 1:3 * 2:4 указывает R умножать каждую пару элементов по порядку.

3. Я полагаю, что есть также элемент рециркуляции, где R будет расширять более короткий вектор до длины более длинного, если это возможно.