> a = pi > a [1] 3.141593 > trunc(a,3) [1] 3
理想情况下,它应该是trunc(a,3),返回3.141为什么会这样?
htrmnn0y1#
R中的trunc总是返回一个 integer 值。如果你想在这个点之后去掉3位小数,你可以乘以10^3,应用trunc,然后再除以10^3。在你的例子中
trunc
a <- pi trunc(a * 1e3) / 1e3
如果你经常需要它,你可以创建自己的函数。下面是一个不捕获错误的简单示例:
# define the function decimaltrunc <- function(x, digits = 0) trunc(x * 10^digits) / 10^digits # then use it: decimaltrunc(pi, 3)
happy R programming:-)
cwxwcias2#
默认的trunc()函数只有一个参数。此参数将被截断,所有其他参数将被忽略。例如:
trunc()
> trunc(2.2, 6.3, 4.4, "hi") [1] 2
请注意,参数也可以是像trunc(c(2.2, 6.3, 4.4))这样的向量,在这种情况下,向量的所有元素都被截断,并返回一个向量,但它仍然只是一个参数。因此,没有实现指定有效位数的功能,您需要乘以10的幂,如答案中的Ute。当提供多个参数时,函数不会给予错误的原因,例如ceiling(1.8, 2.6)(其中 * 确实 * 给出错误),是因为trunc()是用特殊参数...定义的,当实现具有扩展函数的额外参数的自定义类时,它允许轻松扩展原始定义。从舍入函数manual:
trunc(c(2.2, 6.3, 4.4))
ceiling(1.8, 2.6)
...
用法
ceiling(x) floor(x) trunc(x, ...) round(x, digits = 0) signif(x, digits = 6)
参数
x:数值向量。或者,对于round和signif,是一个复向量。digits:表示要使用的小数位数(round)或有效位数(signif)的整数。对于round,允许负值(请参阅“详细信息”)。...参数传递给方法。通常情况下,首先对数据进行一些操作,使其适合原始函数,然后使用内置的NextMethod()调用该函数。在这个调用中,所有参数都提供给原始函数,因此需要忽略任何未使用的参数,如下面示例中的printchar。MCVE:
x
round
signif
digits
NextMethod()
printchar
myobject = 5.4321 class(myobject) <- "MyClass" trunc.MyClass <- function(x, printchar = "*", ...) { paste0(printchar, NextMethod(), printchar) } trunc(myobject, printchar = "#")
结果:
[1] "#5#"
与ceiling()相比,它在原始定义中没有...参数:
ceiling()
myobject = 5.4321 class(myobject) <- "MyClass" ceiling.MyClass <- function(x, printchar = "*", ...) { paste0(printchar, NextMethod(), printchar) } ceiling(myobject, printchar = "#")
在这种情况下,NextMethod()调用会导致错误:
Error in ceiling(myobject, printchar = "#") : 2 arguments passed to 'ceiling' which requires 1
2条答案
按热度按时间htrmnn0y1#
R中的
trunc
总是返回一个 integer 值。如果你想在这个点之后去掉3位小数,你可以乘以10^3,应用trunc
,然后再除以10^3。在你的例子中如果你经常需要它,你可以创建自己的函数。下面是一个不捕获错误的简单示例:
happy R programming:-)
cwxwcias2#
默认的
trunc()
函数只有一个参数。此参数将被截断,所有其他参数将被忽略。例如:请注意,参数也可以是像
trunc(c(2.2, 6.3, 4.4))
这样的向量,在这种情况下,向量的所有元素都被截断,并返回一个向量,但它仍然只是一个参数。因此,没有实现指定有效位数的功能,您需要乘以10的幂,如答案中的Ute。当提供多个参数时,函数不会给予错误的原因,例如
ceiling(1.8, 2.6)
(其中 * 确实 * 给出错误),是因为trunc()
是用特殊参数...
定义的,当实现具有扩展函数的额外参数的自定义类时,它允许轻松扩展原始定义。从舍入函数manual:用法
参数
x
:数值向量。或者,对于round
和signif
,是一个复向量。digits
:表示要使用的小数位数(round
)或有效位数(signif
)的整数。对于round
,允许负值(请参阅“详细信息”)。...
参数传递给方法。通常情况下,首先对数据进行一些操作,使其适合原始函数,然后使用内置的
NextMethod()
调用该函数。在这个调用中,所有参数都提供给原始函数,因此需要忽略任何未使用的参数,如下面示例中的printchar
。MCVE:
结果:
与
ceiling()
相比,它在原始定义中没有...
参数:在这种情况下,
NextMethod()
调用会导致错误: