R-if语句后的多个动作

时间:2018-07-10 13:19:34

标签: r if-statement

我的问题是,如何在if语句之后进行多个操作。例如:

vartest <- var.test(var1 ~ group, alternative='two.sided', conf.level=.95, data=data1)
ttest <- t.test(var1~group, alternative='two.sided', conf.level=.95, var.equal=FALSE, data=data1)
if (vartest$p.value>0.05) {
  if (ttest$p.value<=0.05) {
    cat(ttest$p.value)
    ggboxplot(data1, x="group", y="var1", color="group", palette=c("#00AFBB", "#E7B800"), ylab="var1", xlab="group")
    group_by(data1, group) %>% summarise(count = n(), mean = mean(var1, na.rm = TRUE), sd = sd(var1, na.rm = TRUE))
  } else{
    cat("text1.")
    }
} else{
  cat("text2.")
  }

这没有给我我想要的结果,而是仅将表达式的第一部分和最后一部分打印到控制台。 如果我为此更改了操作顺序:

vartest <- var.test(var1 ~ group, alternative='two.sided', conf.level=.95, data=data1)
ttest <- t.test(var1~group, alternative='two.sided', conf.level=.95, var.equal=FALSE, data=data1)
if (vartest$p.value>0.05) {
  if (ttest$p.value<=0.05) {
    cat(ttest$p.value)
    group_by(data1, group) %>% summarise(count = n(), mean = mean(var1, na.rm = TRUE), sd = sd(var1, na.rm = TRUE))
    ggboxplot(data1, x="group", y="var1", color="group", palette=c("#00AFBB", "#E7B800"), ylab="var1", xlab="group")
  } else{
    cat("text1.")
    }
} else{
  cat("text2.")
  }

仅将表达式的第一部分和最后一部分打印到控制台。

任何想法如何在if和else之间运行所有动作? 请帮忙!

2 个答案:

答案 0 :(得分:1)

在括号内禁用隐式打印,并返回最后一个表达式的值。

{
    "hello"
    cat("world\n")
    "how are you"
    "today?"
}

## world
## [1] "today?"

如果要打印或以其他方式显示大括号内的内容,则可以使用显式printmessagecat

{
    print("hello")
    cat("world\n")
    message("how are you")
    "today?"
}
## [1] "hello"
## world
## how are you
## [1] "today?"

答案 1 :(得分:0)

我没有您正在使用的数据,但是我重新创建了您的问题,如下所示:

示例:

library(ggplot2)
library(dplyr)
p.value <- 0.02

if (p.value<=0.05) {
    cat(p.value)
    mtcars %>% group_by(gear) %>% summarise(count = n(), mean = mean(hp))
    qplot(x = wt, y = mpg, data = mtcars, geom = "point")
} else{
    cat("text1.")
}

上面的示例将仅打印p.value和图表。切换绘图和摘要表的顺序将仅返回p.value和摘要表。

为解决此问题,我们可以分配回来并显式打印。

library(ggplot2)
library(dplyr)
p.value <- 0.02

if (p.value<=0.05) {
    cat(p.value)
    my_sum <- mtcars %>% group_by(gear) %>% summarise(count = n(), mean = mean(hp))
    print(my_sum)
    my_plot <- qplot(x = wt, y = mpg, data = mtcars, geom = "point")
    print(my_plot)
} else{
    cat("text1.")
}