使用lapply计算r中的rmse

时间:2014-08-28 17:32:22

标签: r lapply

我在目录中有小的csv文件。我需要从每个文件中计算rmse和mse。

例如在Barcelona.csv内部

City, RealMax, ForecastMax
Barcelona, 30, 29
Barcelona, 31, 29
Barcelona, 32, 31
Barcelona, 29, 29
Barcelona, 27, 29

我现在在R

中有下一个代码
setwd("/home/enric/csv")
filenames <- list.files(pattern="*.csv", full.names=TRUE)  ###I open all the files csv
ldf <- lapply(filenames, read.csv, header=FALSE)
length(ldf)
ldf

foo <- function(x) {
# Function that returns Root Mean Squared Error
rmse <- function(error) {
sqrt(mean(error^2,na.rm = TRUE))
}

# Function that returns Mean Absolute Error
mae <- function(error) {
mean(abs(error))
}

error <- x$V2 - x$V3
mae <- mae(error)  
rmse <- rmse(error)   
return( list( mae = mae, rmse = rmse))
}

res <-lapply(ldf, foo)

我收到有关因素的消息......

> res <-lapply(ldf, foo)
Warning messages:
1: In Ops.factor(x$V2, x$V4) : - not meaningful for factors
2: In Ops.factor(x$V2, x$V4) : - not meaningful for factors

如何将因子转换为数字才能解决?嗯,我认为这是问题,有什么帮助吗?

1 个答案:

答案 0 :(得分:0)

可能您没有以数字形式读取数据列。您可以使用str()检查对象的结构和类。要在阅读文件时进行转换,请查看read.csv()especially stringAsFactors的其他选项。您可以通过强制转换为数字来改变类:`as.numeric()'。