R语言 for循环中sprintf函数无法输出的问题

job <- c('admin.','blue-collar','entrepreneur','housemaid','management','retired','self-employed','services','student','technician','unemployed')

jobP <- function(a,b) {
    val <- t.test(df$duration[df$job == a], df$duration[df$job == b])$p.value
    #如果p值小于0.05则输出
    if(val < 0.05){
        sprintf("%s and %s , p-value = %s", a, b, val)
    }   
}
#遍历向量中元素
for(i in job){
    for(j in job){
        jobP(i,j)
    }
}

代码能跑通,在if中用print也能打印,但用sprintf就是不出结果。这个问题百度了好久都没找到原因,最后上谷歌,在COS论坛看见了这篇文章才得以解决。

#解决方法一
print(paste(a, " and ", b, " , p-value = ", val))

#解决方法二
c <- sprintf("%s and %s , p-value = %s", a, b, val)
print(c)

#解决方法三
print(glue::glue("{a} and {b} , p-value = {val}"))

#解决方法四
print(sprintf("%s and %s , p-value = %s", a, b, val))

运行不了的原因是sprintf是用来做字符串拼接的,不是用来print的。虽然单独使用sprintf时结果会自动输出,但在for循环里就不行了,所以需要明确调用打印函数。
犯这种错看来还是因为基础不牢…

你可能感兴趣的:(r语言)