Пользовательская функция с вводом текста - PullRequest
0 голосов
/ 11 июня 2018

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

getSymbols("AAPL", src = "yahoo")

candleChart(AAPL, up.col = "black", dn.col = "red", theme = "white", subset = "2018-01-01/")

addSMA(n = c(10, 30)); addBBands()

Вместо выполнения каждой строки или копирования-вставки из моих заметок в RStudio, я хотел бы создать функцию и ввести символ акции:

Stock.Price(AAPL) 

и запустите все 3 строки.Кто-нибудь может указать мне правильное направление или подробный пример в Интернете?Я привык работать с пакетами и тому подобным, но сейчас разбираюсь с некоторыми аспектами автоматизации.

Ответы [ 2 ]

0 голосов
/ 11 июня 2018

Если я вас правильно понял, вы хотите начать писать свои собственные функции.Хороший ресурс для начала - это, на мой взгляд, this (Hadley Wickham & Garrett Grolemund: R для Data Science).Но все очень просто:

Stock_Price <- function(x) {
  getSymbols("AAPL", src = "yahoo")

  candleChart(AAPL, up.col = "black", dn.col = "red", theme = "white", subset = "2018-01-01/")

  addSMA(n = c(10, 30)); addBBands()

  return(out)
}

Я не проверял ваши строки кода, так что это, вероятно, не сработает.Но есть только четыре части, о которых вы действительно должны подумать (пока).

  • Название функции.Вы можете назвать функцию, назначив определение функции с помощью <-, как вы сделали бы с объектом.Имена функций больше не должны содержать точек, так как это зарезервировано для методов (пока не беспокойтесь об этом, просто используйте _)
  • Что входит в функцию.Это часть в скобках function().Обычно люди используют x, но вы можете использовать все, что захотите.Если вы хотите ввести в функцию более одного значения, используйте запятую: function(x, y).Вы должны использовать это для предоставления всех значений, необходимых для выполнения кода внутри функции, так как в противном случае все может закончиться неудачей.
  • Код внутри функции.Этот код может быть несколькими строками кода или чем-то более сложным.Я использовал ваши три строки кода и просто обернул {} вокруг него.все, что внутри {} будет выполнено при вызове функции.
  • return.Объекты, созданные внутри функции, будут уничтожены, когда R завершит выполнение кода.Но он вернет точно один объект.Тот, который вы поставляете на return.Альтернативно, вы можете просто написать объект в последней строке функции, чтобы вернуть его, но я бы порекомендовал вам сделать вещи более явными на данный момент.Для демонстрации я просто вернул ваш ввод обратно в глобальную среду, что означает, что он будет напечатан на консоли.

Если вы запустите определение функции, оно будет храниться в вашей глобальной среде, как и любой другой объект.Что вы можете сделать, чтобы вернуть его после перезапуска R, это сохранить определение функции в скрипте R и получить его после открытия R: source("path/to/script.R").

Это должно помочь вам начать.

0 голосов
/ 11 июня 2018

Функции в R полезны для избавления от повторяющихся строк кода и возможности быстрой смены переменных.Если вы просто хотите сделать то, что указано в вашем вопросе, то посмотрите код ниже.

AAPL<-function(){

getSymbols("AAPL", src = "yahoo")

candleChart(AAPL, up.col = "black", dn.col = "red", theme = "white", subset 
= "2018-01-01/")

addSMA(n = c(10, 30)); addBBands()

return(NA)

}

StockPrice<-AAPL()

Аргумент возврата описывает, какие вычисления и переменные вы хотите вернуть из функции, поскольку они не сохраняются в глобальной среде.,Вам не нужно возвращать графики, они будут просто построены.

Ниже приведен более сложный пример функции, в которой мы присваиваем переменные A и B и возвращаем их вычисление переменной, котораяназывается функция.Я думаю, что это то, что полезно для функций в R.

My_Function<-function(A,B){

Test=A+B+4

return(Test)

}

Answer<-My_Function(1,2)
Answer_two<-My_Function(8,10)

Обратите внимание, что мы можем вызывать функцию бесконечное количество раз и присваивать любое число, которое мы хотим, A и B, и функция знает где угодноэто A и B для подключения значений, которые были введены во время вызова.

Я не уверен, как пользователь вводит символ акции, поэтому я подойду к этому с решением shiny.

#simulated input from user
UserChoice<-"GOOG"

Stocks<-function(Symbol,Symbol2){

getSymbols(Symbol2, src = "yahoo")

candleChart(Symbol, up.col = "black", dn.col = "red", theme = "white", 
subset  = "2018-01-01/")

addSMA(n = c(10, 30)); addBBands()

return(NA)

}


# By using simulated user input we can apply the function to basically any 
# four letter stock code by changing the `Stocks()` arguments.

if(UserChoice=="APPL"){
APPL<-Stocks(APPL,"APPL")

} else if (UserChoice=="GOOG"){
GOOG<-Stocks(GOOG,"GOOG")

} else {}

Обратите внимание, что Symbol и Symbol2 являются аргументами, которые должны быть переданы функции, Symbol2 является символом

Теперь GOOG и APPL создаются переменными, которым ничего не назначено,чтобы сделать их равными чему-либо, необходимо назначить переменную и затем вернуть ее из функции.Допустим, мы хотим вернуть первую строку, просто установить ее равной переменной, а затем вернуть ....

....
a<-getSymbols("AAPL", src = "yahoo")
.....
return(a)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...