Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R:if else语句将列作为整个向量处理_R_Tidyquant - Fatal编程技术网

R:if else语句将列作为整个向量处理

R:if else语句将列作为整个向量处理,r,tidyquant,R,Tidyquant,我有一个数据集,我想用tq_get计算6个月的股票回报率(见下面的示例) 数据集名为top ticker 6month AKO.A BIG BGFV 作用 library(tidyverse) library(dplyr) library(tidyquant) library(riingo) calculate <- function (x) { (tq_get(x, get = "tiingo", from = yesterday, to = yesterda

我有一个数据集,我想用
tq_get
计算6个月的股票回报率(见下面的示例)

数据集名为
top

ticker 6month
AKO.A
BIG
BGFV
作用

library(tidyverse)
library(dplyr)
library(tidyquant)
library(riingo)

calculate <- function (x) {
  (tq_get(x, get = "tiingo", from = yesterday, to = yesterday)$adjusted/tq_get(x, get = "tiingo", from = before, to = before)$adjusted)-1
}

top[2] <- lapply(top[1], function(x) calculate(x))
但是现在我收到错误消息
x ticker的长度必须是1,但实际上是3


我假设这是基于这样一个事实:我的数据集的整个第一列被用作
受支持的\u ticker()
的输入,而不是逐行输入。如何解决此问题?

查看文档,似乎
tq\u get
支持多个符号,只有
如果受支持的\u ticker
一次运行一个符号。因此,您可能应该检查所有的ticker,看看它们是否受支持,然后在所有受支持的ticker上使用
tq\u get
一次。类似这样的内容(未经测试,因为我没有这些软件包):


通过这种方式,您可以动态地传递
之前的
昨天的
的值。如果它们是您的全局环境中的对象,您可以简单地使用
calculate(top$ticker,before,before,Beyone)
,但它可以让您自由地更改这些参数,而无需在您的全局环境中重新定义这些名称。

谢谢,工作起来很有魅力(第6行中的“p”中缺少支持的一个输入错误)。我将昨天
和之前
计算为全球环境中的值。如何将它们作为参数传递给函数?很高兴听到它起作用了!而且打字错误被修正了。我将进行编辑,以包含一个在
之前
昨天
参数的版本。太好了,太完美了。
calculate <- function (x) {
  if (is_supported_ticker(x, type = "tiingo") == TRUE) {
  (tq_get(x, get = "tiingo", from = yesterday, to = yesterday)$adjusted/tq_get(x, get = "tiingo", from = before, to = before)$adjusted)-1
  }
  else {
    NA
  }
}

top[2] <- lapply(top[1], function(x) calculate(x))
calculate <- function (x) {
  supported = sapply(x, is_supported_ticker, type = "tiingo")
  result = rep(NA, length(x))
  result[supported] = 
    (
      tq_get(x[supported], get = "tiingo", from = yesterday, to = yesterday)$adjusted / 
      tq_get(x[supported], get = "tiingo", from = before, to = before)$adjusted
    ) - 1
  return(result)
}
calculate <- function (x, before, yesterday) {
  supported = sapply(x, is_supported_ticker, type = "tiingo")
  result = rep(NA, length(x))
  result[supported] = 
    (
      tq_get(x[supported], get = "tiingo", from = yesterday, to = yesterday)$adjusted / 
      tq_get(x[supported], get = "tiingo", from = before, to = before)$adjusted
    ) - 1
  return(result)
}

# then calling it
calculate(top$ticker, before = <...>, yesterday = <...>)