R语言中取整运算主要包括以下五种:floor():向下取整;ceiling(): 向上取整;round(): 四舍五入取整;turnc(): 向0取整;signif(): 保留给定位数的精度。
floor返回对应数字的'地板'值,即不大于该数字的最大值;
ceiling返回对应数字的'天花板'值,就是不小于该数字的最小整数;
round是R里的'四舍五入'函数,具体的规则采用banker's rounding,即四舍六入五留双规则(wiki)。round的原型是round(x, digits = 0), digits设定小数点位置,默认为零即小数点后零位(取整)。
trun的特性是'向零截取', 也就是说对于一个数字a,它将数轴分成两侧,trunc(a)将返回数轴上包含数字0的那一侧离a最近的那个整数。
signif是保留有效数字的函数。常用于科学计数。
我也遇到过很多次这个问题,尤其是再用到tune.svm的时候,这是由这个函数内部决定的。我的建议有两点:
减少tuning parameter的数量或者说范围
用Python sklearn去tune 如果非得需要用R 就python tune的差不多带回到R里直接用
希望对你有帮助!
LagrangePolynomial <- function(x,y) {len = length(x)
if(len != length(y))
stop("length not equal!")
if(len < 2)
stop("dim size must more than 1")
#pretreat data abd alloc memery
xx <- paste("(","a -",x,")")
m <- c(rep(0,len))
#combin express
for(i in 1:len) {
td <- 1
tm <- "1"
for(j in 1:len) {
if(i != j) {
td <- td*(x[i] - x[j])
tm <- paste(tm,"*",xx[j])
}
}
tm <- paste(tm,"/",td)
m[i]<-tm #m[i] <- parse(text=tm)
}
#combin the exrpession
m <- paste(m,"*",y)
r <- paste(m,collapse="+")
#combin the function
fbody <- paste("{ return(",r,")}")
f <- function(a) {}
#fill the function's body
body(f) <- parse(text=fbody)
return(f)
}
这是拉格朗日多项式插值算法 你参考下吧