Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
as.numeric(as.character(x)),其中x最初是一个数字,是否可以更改x?_R - Fatal编程技术网

as.numeric(as.character(x)),其中x最初是一个数字,是否可以更改x?

as.numeric(as.character(x)),其中x最初是一个数字,是否可以更改x?,r,R,我想知道,如果将数字转换为字符,然后再回到R中,是否会改变数字?例如,as.character是否在一定的小数位数后舍入数字(如果是,则舍入多少位)?@jogo感谢您的建议:) 以下是评论作为回答: 从?as.character(): as.character表示15位有效的实数和复数 数字(从技术上讲)是编译器对ISO C常量的设置 DBL_DIG,在支持IEC60559算法的机器上为15 根据C99标准)。这样可以确保 结果将是可靠的(而不是代表性的结果 错误),但这确实意味着转换为字符并返

我想知道,如果将数字转换为字符,然后再回到R中,是否会改变数字?例如,as.character是否在一定的小数位数后舍入数字(如果是,则舍入多少位)?

@jogo感谢您的建议:)

以下是评论作为回答:

?as.character()

as.character表示15位有效的实数和复数 数字(从技术上讲)是编译器对ISO C常量的设置 DBL_DIG,在支持IEC60559算法的机器上为15 根据C99标准)。这样可以确保 结果将是可靠的(而不是代表性的结果 错误),但这确实意味着转换为字符并返回到数字 我可以更改号码。如果要将数字转换为字符 尽可能精确地使用格式


是的,如果你有超过15个有效数字,它会改变数字。见:

> as.character(1.000000000000001) # more than 15 significant digits
[1] "1"
> as.character(1.00000000000001) # less than 15 significant digits
[1] "1.00000000000001"
以下是一些其他示例:

y <- as.numeric(as.character(pi))
identical(y, pi) ### gives FALSE

?as.character()
:“as.character将实数和复数表示为15位有效数字(从技术上讲,编译器对ISO C常量DBL_DIG的设置为15位,根据C99标准,在支持IEC60559算法的机器上为15位)。这确保了结果中的所有数字都是可靠的(并不是表示错误的结果),但这确实意味着转换为字符和返回数字可能会更改数字。如果要将数字转换为尽可能高的精度的字符,请使用“格式”。因此,如果您的有效位数超过15位,则会更改数字。请参阅:
as.character(1.00000000000000 1)
作为.character(1.00000000000001)
y一个有趣的例子是
.Machine$double.xmax
,它在转换后从有限变为
Inf
。@Paul,你可以写一个答案(如果你愿意的话)。
x <- 1/7
y <- as.numeric(as.character(x))
x-y
as.numeric(as.character(.Machine$double.xmax)) ## result: Inf