R语言plusMinus函数输出字符串而非小数的问题求助
修正R代码:输出指定格式的小数而非字符串
问题描述
给定整数数组,需计算正数、负数、零元素的占比,要求输出保留6位小数的十进制值,但现有代码运行后输出带引号的字符串,且每行带有[1]标识,不符合预期格式。
原代码
plusMinus <- function(arr) { size <- length(arr) pos <- length(arr[arr > 0]) neg <- length(arr[arr < 0]) zero <- length(arr[arr == 0]) x <- pos / size y <- neg / size z <- zero / size print(sprintf(x, fmt = "%#.6f")) print(sprintf(y, fmt = "%#.6f")) print(sprintf(z, fmt = "%#.6f")) } arr <- c(1, 1, 0, -1, -1) arr <- as.integer(arr) plusMinus(arr)
问题根源
sprintf参数顺序错误:该函数的正确语法是sprintf(格式字符串, 待格式化的值),原代码颠倒了参数顺序,导致格式化逻辑出错。print函数的默认输出格式:print会输出R控制台的默认格式,自动添加[1]标识和字符串引号,无法生成纯小数的无格式输出。
修正方案
调整sprintf参数顺序,并使用cat函数替代print,cat可以直接输出纯文本内容,无需额外格式标识:
plusMinus <- function(arr) { size <- length(arr) pos <- length(arr[arr > 0]) neg <- length(arr[arr < 0]) zero <- length(arr[arr == 0]) x <- pos / size y <- neg / size z <- zero / size # 用sprintf按格式生成字符串,cat输出时用空格分隔,最后换行 cat(sprintf("%.6f", x), sprintf("%.6f", y), sprintf("%.6f", z), "\n") } arr <- c(1, 1, 0, -1, -1) arr <- as.integer(arr) plusMinus(arr)
修正后输出
0.400000 0.400000 0.200000
(注:原示例数组长度为5,正数2个、负数2个、零1个,对应占比为0.4、0.4、0.2,原预期输出数值与给定数组不匹配,修正后输出为正确结果)
内容的提问来源于stack exchange,提问作者user21263583
相关产品推荐
相关产品推荐

