嵌套的 if else 语句在 R 中。 继续"Error: no function to return from, jumping to top level"



我知道周围有很多这样的问题,并尝试了提出的解决方案。但我仍然无法解决以下问题。我的目标是在 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) 
    }

我缺少什么明显的东西吗?看来我只是需要一个新的眼光。谢谢!

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

最新更新