#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 будет расширять более короткий вектор до длины более длинного, если это возможно.