Function R中的by函数的舍入输出

Function R中的by函数的舍入输出,function,r,Function,R,我正在尝试对R中的简单by()函数的输出进行四舍五入。这就是我所拥有的: > by(glaciers[,1:3],glaciers$activity.level,mean) glaciers$activity.level: Active aspect sun.duration latitude -9.444444e+00 1.771778e+03 3.247643e+09 -----------------------------------------

我正在尝试对
R
中的简单
by()
函数的输出进行四舍五入。这就是我所拥有的:

> by(glaciers[,1:3],glaciers$activity.level,mean)

glaciers$activity.level: Active
       aspect  sun.duration      latitude 
-9.444444e+00  1.771778e+03  3.247643e+09 
-------------------------------------------
glaciers$activity.level: Inactive
      aspect sun.duration     latitude 
1.041667e+01 2.067583e+03 4.048301e+09 
-------------------------------------------
glaciers$activity.level: Relict
      aspect sun.duration     latitude 
1.766667e+01 2.168000e+03 2.759283e+09 
我怎样才能使我的输出四舍五入到小数点后5位,并且仍然保留因子

我试过:
round(by(Glaces[,1:3],Glaces$activity.level,mean),5)
但得到一个错误:
数学函数的非数值参数

by(glaciers[,1:3], glaciers$activity.level, function(x){round(mean(x),5)})
更新

以下是一个工作示例:

glaciers <- as.data.frame(matrix(rnorm(1000),ncol=4)) 
glaciers[,4] <- sample(0:3,250,replace=TRUE) 
colnames(glaciers) <- c("A","B","C","activity.level") 
by(glaciers[,1:3], glaciers$activity.level, function(x){round(mean(x),5)})

p>如果您已经将输出保存到变量中,例如x:

x <- by(glaciers[,1:3],glaciers$activity.level,mean)
因此,对最初发布的表达式的更正将是

x[] <- lapply(x,formatC,digits=5,format="f")

x[]要舍入还是只截断显示的位数?如果是后者,请使用选项(数字=3)或其他选项

> by(mpg[,8:9], mpg$cyl, mean)
mpg$cyl: 4
   cty    hwy 
21.012 28.802 
------------------------------------------------------------ 
mpg$cyl: 5
  cty   hwy 
20.50 28.75 
------------------------------------------------------------ 
mpg$cyl: 6
   cty    hwy 
16.215 22.823 
------------------------------------------------------------ 
mpg$cyl: 8
   cty    hwy 
12.571 17.629 
> options(digits=3)
> by(mpg[,8:9], mpg$cyl, mean)
mpg$cyl: 4
 cty  hwy 
21.0 28.8 
------------------------------------------------------------ 
mpg$cyl: 5
 cty  hwy 
20.5 28.8 
------------------------------------------------------------ 
mpg$cyl: 6
 cty  hwy 
16.2 22.8 
------------------------------------------------------------ 
mpg$cyl: 8
 cty  hwy 
12.6 17.6 

只有几分钟的时间,但您可以尝试查看
format()
formatC()
prettyNum()
函数。他们的帮助文件现在在我看来像是胡言乱语,但我睡得不多。然而,我确实在几个月前的一份Swave报告中使用了其中一个函数,很可能是
formatC()
,在该报告中,我需要非常特殊的格式化数字。

round()
在这种情况下没有意义,因为您使用的是非常大的numebr。您需要使用format()命令,并选择要显示的位数。例如,要显示3个有效数字:

by(glaciers[,1:3], glaciers$activity.level, function(x) {
      as.numeric(format(mean(x), digits=3))
})
您曾问过“我如何才能将我的输出四舍五入到小数点后5位?”但我认为您的意思是“我如何才能使我的输出显示六位有效数字?”下面的代码结合了前面的两个答案——重新分配到res[]的想法,以及使用signif而不是四舍五入

glaciers <- data.frame(aspect=runif(20)*100,
                       sun.duration=runif(20)*10000,
                       latitude=runif(20)*10^9,
                       activity.level=sample(c('Active','Inactive','Relict'),20,replace=TRUE))
res <- by(glaciers[,1:3],glaciers$activity.level,mean)
res[] <- lapply(res,signif,3)
res

补充一点:by()函数的输出是一个“by”对象,因此不能对其执行round()之类的操作。Stephen,我尝试了这种方法,但仍然得到了非整数的指数输出,如上所述。有什么想法吗?Rob,我也尝试过这个方法,但仍然得到了指数为非整数的数字,如上所述。我不知道为什么要使用round()函数。我对它进行了更多的研究,发现如果我按.5进行取整,那么它实际上会取整,但只会取整到小数点后1位。我想四舍五入说小数点后3-5位,但用整数似乎不行。我不知道你在做什么。我更新了我的答案,加入了一个有效的例子。罗伯,如果你看我上面的结果,我的结果是科学符号。round命令似乎对S.N.不起作用,因为数字太长了。我四处寻找帮助,找到了那个签名。这将以您喜欢的精度进行取整,但仍采用科学记数法。我最终在by命令中使用了你的函数位置,但使用了.5而不是5,这使我得到了小数点后1位的实数。通过(Glaces[,1:3],Glaces$activity.level,function(x){round(mean(x),.5)})来澄清:您需要将其放入by()函数中,就像Rob和Stephen对round()所做的那样。
by(glaciers[,1:3], glaciers$activity.level, function(x) {
      as.numeric(format(mean(x), digits=3))
})
glaciers <- data.frame(aspect=runif(20)*100,
                       sun.duration=runif(20)*10000,
                       latitude=runif(20)*10^9,
                       activity.level=sample(c('Active','Inactive','Relict'),20,replace=TRUE))
res <- by(glaciers[,1:3],glaciers$activity.level,mean)
res[] <- lapply(res,signif,3)
res
glaciers$activity.level: Active
      aspect sun.duration     latitude 
    3.66e+01     4.72e+03     4.56e+08 
------------------------------------------------- 
glaciers$activity.level: Inactive
      aspect sun.duration     latitude 
    5.81e+01     5.28e+03     4.83e+08 
------------------------------------------------- 
glaciers$activity.level: Relict
      aspect sun.duration     latitude 
    6.08e+01     4.75e+03     3.98e+08