r - 如何解决二进制运算的错误非数字参数
问题描述
我想计算股票收益,但出现错误
return=function(x)
{
n=length(x)
x=matrix(x,nrow=n,ncol=1)
return_data=matrix(nrow=n-1,ncol=1)
for(i in 1:n-1)
{
return_data[i]=log(x[i+1,]/x[i,])
}
return_data
}
R_JSMR=return(JSMR)
x[i + 1, ]/x[i, ] 中的错误:二元运算符的非数字参数
我该如何解决?请帮助我,非常感谢你:)
解决方案
错误是使用for
循环1:n-1
而不是1:(n-1)
. 这是修正后的函数及其矢量化版本。
log_returns <- function(x) {
n <- length(x)
return_data <- matrix(nrow = n - 1, ncol = 1)
for(i in 1:(n-1)) {
return_data[i] <- log(x[i+1]/x[i])
}
return_data
}
log_returns2 <- function(x) {
return_data <- log(x[-1]/x[-length(x)])
matrix(return_data, ncol = 1)
}
JSMR <- 1:10
R_JSMR <- log_returns(JSMR)
R_JSMR2 <- log_returns2(JSMR)
identical(R_JSMR,R_JSMR2)
#[1] TRUE
如果您不需要返回矩阵,这里有两个单行。
log_returns3 <- function(x) log(x[-1]/x[-length(x)])
log_returns4 <- function(x) diff(log(x))
推荐阅读
- javascript - 如何防止复选框循环和单选按钮循环创建两个单独的价格总计
- kubernetes - kubernetes 中的“Pods”和“Static Pods”有什么区别以及何时选择“静态 Pods”而不是常规 Pods
- bash - Bash 逐行读取文件并将值附加到特定变量
- linux - 在一次执行运行中从命令输出中获取两个变量
- opencv - 我收到错误。我想反对计数
- python - 将网格导入Fipy后如何从python访问gmsh代码?
- xcode - xcode 11,在不同项目之间共享一组实用程序类
- angular - 带有 Angular 和 Spring 的电子生成器
- html - ionic 3 移动应用程序视频自动播放并在滚动时暂停,如 facebook 视频
- visual-studio - 无法在 Visual Studio 2017 中创建控制器