R中编写生成统计摘要段落的函数遇到报错该如何解决
R统计摘要函数报错解决方案
剩余报错原因及修复方法
报错1:
Error in print.default("The mean is, ", mean(x)) : invalid printing digits -15
原因是错误调用了print函数:print的第二个参数为控制输出位数的digits,你直接将mean(x)的计算结果作为第二个参数传入,R将-15.66判定为非法的位数参数导致报错。
修复:不需要用print拼接内容,直接用cat、paste0函数做字符串拼接即可。报错2:
Error: unexpected string constant in: " ".\n\n""
原因是cat函数的拼接参数之间缺少逗号分隔:你在skew(v)对应的语句结束后没有加逗号,直接换行写了后续的".\n\n"字符串,R无法识别无分隔符的连续字符串常量。另外你拆分了长字符串到不同行,也会触发语法问题。
修复:cat内所有要拼接的元素之间都加逗号分隔,单个字符串不要拆分成多行书写。
优化后的完整可用代码
首先提前安装加载偏度峰度依赖包:
install.packages("moments") library(moments)
修复后的函数如下,还同步修正了你原代码中计算第二个向量分位数、峰度时误用第一个向量数据的问题,同时增加了位数保留处理,输出结果更适合直接用于报告:
make_paragraph <- function(v, w) { # 输出第一个变量的统计段落 cat( "对于变量v,数值范围为", min(v), "到", max(v), "。均值为", round(mean(v),2), ",中位数为", round(median(v),2), "。方差为", round(var(v),2), ",标准差为", round(sd(v),2), "。四分位距为", round(IQR(v),2), "。25分位数为", round(quantile(v,0.25),2), ",50分位数为", round(quantile(v, 0.5),2), ",75分位数为", round(quantile(v, 0.75),2), "。峰度为", round(kurtosis(v),2), ",偏度为", round(skew(v),2), "。\n\n", sep="" ) # 输出第二个变量的统计段落 cat( "对于变量w,数值范围为", min(w), "到", max(w), "。均值为", round(mean(w),2), ",中位数为", round(median(w),2), "。方差为", round(var(w),2), ",标准差为", round(sd(w),2), "。四分位距为", round(IQR(w),2), "。25分位数为", round(quantile(w,0.25),2), ",50分位数为", round(quantile(w, 0.5),2), ",75分位数为", round(quantile(w, 0.75),2), "。峰度为", round(kurtosis(w),2), ",偏度为", round(skew(w),2), "。\n\n", sep="" ) }
调用示例:
x <- c(1.5, -0.3, 12, 8.5, -100) y <- rnorm(10) make_paragraph(x,y)
内容的提问来源于stack exchange,提问作者Jama
相关产品推荐
相关产品推荐

