编写一个对R中的向量进行操作的函数

时间:2014-04-22 00:57:04

标签: r function if-statement for-loop vector

我试图在矢量(t)上运行以下函数但是我得到以下错误:

    rho.prime <- function(t, k=19000){
  for (i in seq(1,length(t))){
    if (abs(t[i]) <= k)
    { print(2*t[i])
      return(2*t[i])
    }
    else 
    {
      print(2*k*sign(t[i]))
      return(2*k*sign(t[i]))
    }
  }
}

这里是rho.prime功能描述: enter image description here

问题是我怀疑结果:

> t=c(1,3,5,7,10)
> t
[1]  1  3  5  7 10
> rho.prime(t,k)
[1] 2
[1] 2

2 个答案:

答案 0 :(得分:4)

您的功能可能如下所示:

rho<-function(t,k) ifelse(abs(t)<=k,t^2,(2*k*abs(t))-k^2)

答案 1 :(得分:0)

感谢Flodel和Fernando,我可以提出这个解决方案:

rho.prime <- function(t, k=19000){
  out <- rep(NA, length(t))
  for (i in seq(1,length(t))){
    if (abs(t[i]) <= k)
    { print(2*t[i])
      out[i] <- 2*t[i] 
    }
    else 
    {
      print(2*k*sign(t[i]))
      out[i] <- 2*k*sign(t[i])
    }
  }
  return(out)
}

如果这是正确的,请告诉我。

> t
[1]  1  3  5  7 10
> rho.prime(t,k)
[1] 2
[1] 6
[1] 10
[1] 14
[1] 20
[1]  2  6 10 14 20