试图理解R错误:FUN中的错误(X [[i]],...):仅在具有所有数字变量

时间:2016-06-25 20:44:49

标签: r

我一直收到此错误消息和追溯:

Error in FUN(X[[i]], ...) : 
  only defined on a data frame with all numeric variables 

5 stop("only defined on a data frame with all numeric variables") 
4 FUN(X[[i]], ...) 
3 lapply(args, function(x) {
    x <- as.matrix(x)
    if (!is.numeric(x) && !is.complex(x)) 
        stop("only defined on a data frame with all numeric variables") ... 
2 Summary.data.frame(structure(list(Date = structure(c(279L, 285L, 
291L, 297L, 303L, 315L, 321L, 327L, 333L, 339L, 345L, 357L, 363L, 
369L, 375L, 387L, 393L, 399L, 405L, 417L, 423L, 429L, 435L, 441L, 
447L, 453L, 477L, 501L, 555L, 561L, 567L, 573L, 579L, 585L, 591L,  ... 
1 corr("specdata") 

从我的研究中看来,这意味着我的数据集中存在非数字数据。我使用的数据集来自Coursera课程,如果是这样,我会假设其他人会遇到与我相同的问题,但在任何讨论中似乎都没有提及董事会或网上有类似问题。我唯一的猜测是它是我的功能代码的结果,如下所示:

corr <- function(directory, threshold = 0) {

vect1 <- numeric()
files_list <- list.files(directory, full.names = TRUE)

for (i in 1:332) {

    data <- read.csv(files_list[i])
    good <- complete.cases(data)
    complete_data <- data[good,]
    sulfate <- complete_data[,2]
    nitrate <- complete_data[,3]

        if (sum(complete_data) >= threshold) {
            b <- cor(sulfate,nitrate)
            vect1 <- rbind(b)
        }
        else vect1 <- (numeric())
    }
    return(vect1)
}

从错误消息和回溯中我“想”当硫酸盐和硝酸盐柱上的相关性运行时发生错误。当我在目录中的第一个文件上运行代码时,它运行正常,没有错误消息。有关此错误发生原因以及如何解决此问题的任何帮助或见解都会有所帮助。

我试图将数据集强制为数字 -

complete_data <- as.numeric(data[good,])

但是我收到了不同的错误消息“错误:(列表)对象无法强制输入'double'”

2 个答案:

答案 0 :(得分:2)

答案是我无法对对象&#39; complete_data求和。&#39;我的意思是对逻辑向量求和“好”,但是犯了一个错误并尝试对错误的对象求和。我使用了完整数据的完整数据,这解决了我的问题!

答案 1 :(得分:0)

也许您应该计算好数据中的行数,而不是尝试对整个数据帧求和。

if (nrow(complete_data) >= threshold) {
    b <- cor(sulfate,nitrate)
    vect1 <- rbind(b)
}