首页 > 解决方案 > 如何解决二进制运算的错误非数字参数

问题描述

我想计算股票收益,但出现错误

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, ] 中的错误:二元运算符的非数字参数

我该如何解决?请帮助我,非常感谢你:)

标签: rreturn

解决方案


错误是使用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))

推荐阅读