Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/65.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
使用嵌入在SQL中的R的累积度量_Sql_R_Sql Server - Fatal编程技术网

使用嵌入在SQL中的R的累积度量

使用嵌入在SQL中的R的累积度量,sql,r,sql-server,Sql,R,Sql Server,请原谅,我对R非常陌生,我只是在看SQL 2016环境中当前的选项 我们目前要求提供累积绩效回报。下面是一个示例数据集: FundID Date FundReturn ABC 1987-10-31 0 ABC 1987-11-30 -9.28669 ABC 1987-12-31 3.08304 ABC 1988-01-31 -3.00125 ABC 1988-02-29 0.61238 ABC 1988-03-31 4.

请原谅,我对R非常陌生,我只是在看SQL 2016环境中当前的选项

我们目前要求提供累积绩效回报。下面是一个示例数据集:

FundID  Date        FundReturn
ABC     1987-10-31  0
ABC     1987-11-30  -9.28669
ABC     1987-12-31  3.08304
ABC     1988-01-31  -3.00125
ABC     1988-02-29  0.61238
ABC     1988-03-31  4.29258
ABC     1988-04-30  0.13697
ABC     1988-05-31  2.57786
ABC     1988-06-30  2.36947
ABC     1988-07-31  0.57114
ABC     1988-08-31  -1.21550
ABC     1988-09-30  7.09027
ABC     1988-10-31  3.45807
ABC     1988-11-30  1.12679
我们需要获取此数据集并对其应用累积性能回报度量,以便数据集如下所示:

FundID  Date        FundReturn      FundReturnCumu100   FundReturnCumu0
ABC     1987-10-31  0               1                   0
ABC     1987-11-30  -9.28669        0.9071331           -0.0928669
ABC     1987-12-31  3.08304         0.935100376         -0.064899624
ABC     1988-01-31  -3.00125        0.907035676         -0.092964324
ABC     1988-02-29  0.61238         0.912590181         -0.087409819
ABC     1988-03-31  4.29258         0.951763845         -0.048236155
ABC     1988-04-30  0.13697         0.953067476         -0.046932524
ABC     1988-05-31  2.57786         0.977636221         -0.022363779
ABC     1988-06-30  2.36947         1.000801018         0.000801018
ABC     1988-07-31  0.57114         1.006516993         0.006516993
ABC     1988-08-31  -1.2155         0.994282779         -0.005717221
ABC     1988-09-30  7.09027         1.064780113         0.064780113
ABC     1988-10-31  3.45807         1.101600954         0.101600954
ABC     1988-11-30  1.12679         1.114013684         0.114013684
我可以使用以下代码在SQL中创建此项:

选择 芬迪德 ,[日期] ,基金回报 ,ISNULL EXPSUMLOGABSNULLIFFundReturn+100/100,1 按FundID,[日期]行无限制的超额订购 ,1为基金收益CUMU100 ,ISNULL EXPSUMLOGABSNULLIFFundReturn+100/100,1 按FundID,[日期]行无限制的超额订购 ,1-1作为基金收益cumu0 从工作台 在[日期]前订购 我还想测试使用嵌入到SQL存储过程中的R函数是否可以得到相同的结果?上面的数学基本上是一个时间序列的性能回报的乘积,那么我是否可以使用一个乘积函数来创建相同的结果数据集

编辑:到目前为止,我已经完成了以下工作,它使用sp_execute_external_脚本返回数据集的基础:

EXEC sp_execute_外部_脚本 @语言=N'R' ,@script=N'OutputDataSet我们可以使用

library(dplyr)
df1 %>% 
   arrange(FundID, Date) %>%
   mutate(FundReturnCumu100 = exp(cumsum(log(abs((FundReturn + 100)/100)))), 
          FundReturnCumu0 = FundReturnCumu100 - 1)
# FundID       Date FundReturn FundReturnCumu100 FundReturnCumu0
#1     ABC 1987-10-31    0.00000         1.0000000    0.0000000000
#2     ABC 1987-11-30   -9.28669         0.9071331   -0.0928669000
#3     ABC 1987-12-31    3.08304         0.9351004   -0.0648996237
#4     ABC 1988-01-31   -3.00125         0.9070357   -0.0929643237
#5     ABC 1988-02-29    0.61238         0.9125902   -0.0874098186
#6     ABC 1988-03-31    4.29258         0.9517638   -0.0482361550
#7     ABC 1988-04-30    0.13697         0.9530675   -0.0469325241
#8     ABC 1988-05-31    2.57786         0.9776362   -0.0223637789
#9     ABC 1988-06-30    2.36947         1.0008010    0.0008010181
#10    ABC 1988-07-31    0.57114         1.0065170    0.0065169930
#11    ABC 1988-08-31   -1.21550         0.9942828   -0.0057172210
#12    ABC 1988-09-30    7.09027         1.0647801    0.0647801126
#13    ABC 1988-10-31    3.45807         1.1016010    0.1016009542
#14    ABC 1988-11-30    1.12679         1.1140137    0.1140136836

在深入研究谷歌之后,我终于找到了答案。最后,我得出以下结论:

FundID  Date        FundReturn      FundReturnCumu100   FundReturnCumu0
ABC     1987-10-31  0               1                   0
ABC     1987-11-30  -9.28669        0.9071331           -0.0928669
ABC     1987-12-31  3.08304         0.935100376         -0.064899624
ABC     1988-01-31  -3.00125        0.907035676         -0.092964324
ABC     1988-02-29  0.61238         0.912590181         -0.087409819
ABC     1988-03-31  4.29258         0.951763845         -0.048236155
ABC     1988-04-30  0.13697         0.953067476         -0.046932524
ABC     1988-05-31  2.57786         0.977636221         -0.022363779
ABC     1988-06-30  2.36947         1.000801018         0.000801018
ABC     1988-07-31  0.57114         1.006516993         0.006516993
ABC     1988-08-31  -1.2155         0.994282779         -0.005717221
ABC     1988-09-30  7.09027         1.064780113         0.064780113
ABC     1988-10-31  3.45807         1.101600954         0.101600954
ABC     1988-11-30  1.12679         1.114013684         0.114013684
声明@R_脚本NVARCHARMAX; 设置@R_Script=N'
OutputDataSet抱歉@akrun这听起来可能是个愚蠢的问题,但我如何才能将我的sql表传递给此脚本?我可以在MS SQL Server 16中直接使用它,并在其上安装R服务吗?抱歉,正如我所说,我对SQL环境中的R非常陌生