在获得一些项目批准后,我有月度报告,我开始在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行。任何人都可以指出我正确的方向或网络上的综合例子?我习惯于使用包等,但现在只是涉及一些自动化方面。
答案 0 :(得分:0)
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()
return参数概述了您希望从函数返回的计算和变量,因为它们未保存在全局环境中。您不需要返回绘图,只需绘制它们。
下面是一个更复杂的函数示例,其中我们分配变量A&amp; 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)
答案 1 :(得分:0)
如果我说得对,你想开始编写自己的功能。在我看来,一个很好的资源是this(Hadley Wickham&amp; Garrett Grolemund:R for 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")
后获取它。
这应该让你开始。