【发布时间】:2019-07-26 01:03:11
【问题描述】:
我正在努力确定用于比较包含作为条件语句一部分的函数的变量的值的语法。
我写了以下函数:
cv_func <- function(df, method, target, nFolds=5, seedVal=100, metrics_list=c("ACC","TPR","PRECISION","F1"), l=0.3, m=0.2, n=500, h='a', kernal='rbfdot', c=1, i=TRUE, f=TRUE, k=1, x=TRUE)
{
# create folds using the assigned values
set.seed(seedVal)
folds = createFolds(df[,target],nFolds)
# lapply loop
cv_results <- lapply(folds, function(x)
{
# data preparation:
test_target <- df[x,target]
test_input <- df[x,-target]
train_target <- df[-x,target]
train_input <- df[-x,-target]
if (method==MLP) {
pred_model <- method(train_target~., data=train_input, l=l, m=m, n=n, h=h)
}
else if (method==ksvm) {
pred_model <- method(train_target~., data=train_input, kernal=kernal, C=c)
}
else if (method==IBk) {
pred_model <- method(train_target~., data=train_input, control = Weka_control(I=i, K=k, F=f, X=x))
}
else {
pred_model <- method(train_target~., data=train_input)
}
pred_train <- predict(pred_model, train_input)
return(mmetric(train_target, pred_train, metrics_list))
})
# convert a list to a data frame using as.data.frame and convert this data frame to a matrix before using rowSds()
cv_results_m <- as.matrix(as.data.frame(cv_results))
cv_mean<- as.matrix(rowMeans(cv_results_m))
cv_sd <- as.matrix(rowSds(cv_results_m))
colnames(cv_mean) <- "Mean"
colnames(cv_sd) <- "Sd"
# Combine and show cv_results and Means and Sds
cv_all <- cbind(cv_results_m, cv_mean, cv_sd)
kable(t(cv_all),digits=3)
}
当我尝试使用默认参数运行函数时,出现错误:
cv_func(df=df, method=IBk, target=20)
错误:“方法错误 == “MLP”:比较 (1) 仅适用于原子类型和列表类型”
我是否可以使用包含函数的变量作为 R 中条件的一部分?
【问题讨论】:
-
@Marius same() 函数也是一个不错的选择。让它与两种解决方案一起工作。确保将“相同()”添加到我的 R 工具箱