带TEXT输入的用户定义函数

时间:2018-06-11 14:37:05

标签: r function

在获得一些项目批准后,我有月度报告,我开始在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 :(得分: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 {}

请注意,SymbolSymbol2是要传递给函数的参数,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")后获取它。

这应该让你开始。

相关问题