R中的sapply或其他应用函数

时间:2015-04-06 03:18:51

标签: r for-loop

我昨天写了一些代码,让你感到困惑。对于那个很抱歉。所以我再次以更简单的方式写了它。

我的问题是: 是否有更容易(或更快)的方式来实现以下代码?

k <- c(.04, .08, .12, .16, .2);

library(plyr)
valfcn <- function(k, V_next){
  a <- .3;
  b <- .6;

 return_val <- vector()
  for(i in 1:5){
    tmp <- vector()
    for(j in 1:5){
  tmp[j] <- (log(k[i]^a - k[j]) + b*V_next[j]);
}
return_val <- c(return_val,max(tmp[i]))
}
  return_val

}

V0 <- c(rep(0,5))
V1 <- valfcn(k,V0)
V2 <- valfcn(k,V1)

V1
V2

我想使用可能更短但更快的替代方法,而不是使用for-loop方法。

最佳!

1 个答案:

答案 0 :(得分:1)

我认为sapply()根据您的描述不是必需的。这样的事情可能会做你正在寻找的事情:

valfcn <- function(k, V_next){
  a <- .3;
  b <- .6;
  max(log(k^a - k) + b*V_next);
}

在此版本中,对k进行的转换会生成一个向量,然后max()会对整个向量进行操作。无需使用循环或使用sapply(),因为max()会处理它。