在R中嵌套if else语句。继续得到"错误:没有函数返回,跳到顶层"

时间:2017-11-05 11:10:10

标签: r loops if-statement nested

我知道有很多这样的问题,并尝试了所提出的解决方案。但我还是无法解决以下问题。 我的目标是在R中创建一个函数,它将关联数据框中的列对。取决于成对完整观察的数量,它将使用略微不同的方法。 这里的问题是无论我尝试什么,在声明功能的同时,我不断得到:

Error: no function to return from, jumping to top level

Error: unexpected '}' in "}"

这是功能:

    corr.loop <- function(df, varsA, varsB, normal, nonnormal) {
    results <- matrix(ncol = 8)
    colnames(results) <- c("varA", "varB", "type", "complete.obs.n", "estimate", "p", "lower.CI", "upper.CI")
    for (i in 1:length(varsA)) {
    for (j in 1:length(varsB)) {

      if ( 
        pairwise.complete.obs.n(df[, varsA[i]], df[, varsB[j]]) < 3 
        ) {
        results <- rbind(results,
                         c(
                           varsA[i],
                           varsB[j],
                           NA,
                           pairwise.complete.obs.n(df[, varsA[i]], df[, varsB[j]]),
                           rep(NA, 4)
                         ))
      } else { 

        type <- ifelse( (varsA[i] %in% nonnormal | varsB[j] %in% nonnormal), "spearman", "pearson")

      cor.results <-  ifelse( 
          type == "pearson",
          cor.test(
            x = df[, varsA[i]],
            y = df[, varsB[j]],
            alternative = "two.sided",
            method = "pearson",
            exact = TRUE,
            conf.level = 0.95,
            continuity = TRUE
          ),
          cor.test(
            x = df[, varsA[i]],
            y = df[, varsB[j]],
            alternative = "two.sided",
            method = "spearman",
            exact = TRUE,
            conf.level = 0.95,
            continuity = TRUE
          )
        )

        if ( 
          pairwise.complete.obs.n(df[, varsA[i]], df[, varsB[j]]) = 3 
          ) {
          results <- rbind(
            results,
            c(
              varsA[i],
              varsB[j],
              type,
              pairwise.complete.obs.n(df[, varsA[i]], df[, varsB[j]]),
              cor.results$estimate,
              cor.results$p.value,
              NA,
              NA
            )
          )

        } else {
          results <- rbind(
            results,
            c(
              varsA[i],
              varsB[j],
              type,
              pairwise.complete.obs.n(df[, varsA[i]], df[, varsB[j]]),
              cor.results$estimate,
              cor.results$p.value,
              cor.results$conf.int[1],
              cor.results$conf.int[2]
            )
          )

        }
      }
    }
  }
    results <- as.data.frame(results[-1, ])
    results[, 1:ncol(results)] <- lapply(results[, 1:ncol(results)], as.character)
    results[, 4:ncol(results)] <- lapply(results[, 4:ncol(results)], as.numeric)
    return(results) 
    }

有什么东西显而易见我错过了吗?似乎我只是需要一个新的眼睛。谢谢!

1 个答案:

答案 0 :(得分:1)

第45行你的意思是==而不是=