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循环里就不行了,所以需要明确调用打印函数。
犯这种错看来还是因为基础不牢…

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值