2

是否可以将一个或多个前导零添加或保留到一个数字而不将结果转换为字符?我找到的每个添加前导零的解决方案都会返回一个字符串,包括:paste、、、和。formatCformatsprintf

例如,可以x0123or00123等​​,而不是123and 仍然是数字?

x <- 0123

编辑

这不是必需的。我只是在玩下面的代码,最后两行给出了错误的答案。我只是想也许如果我可以使用数字格式的前导零获得正确的答案会更容易。

a7   = c(1,1,1,0); b7=c(0,1,1,1);  # 4
a77  = '1110'    ; b77='0111'   ;  # 4
a777 =  1110     ; b777=0111    ;  # 4

length(b7[(b7 %in% intersect(a7,b7))])

R - 计算一个字符串的字符与另一个字符之间的匹配,没有替换

keyword <- unlist(strsplit(a77, ''))
text    <- unlist(strsplit(b77, ''))
sum(!is.na(pmatch(keyword, text)))

ab7 <- read.fwf(file = textConnection(as.character(rbind(a777, b777))), widths = c(1,1,1,1), colClasses = rep("character", 2))
length(ab7[2,][(ab7[2,] %in% intersect(ab7[1,],ab7[2,]))])
4

2 回答 2

8

您没有正确思考“数字”是什么。编程语言存储一个内部表示,该表示保持机器极限的完全精度。您显然关心打印到屏幕或控制台的内容。根据定义,这些数字字符是字符串元素,也就是说,ASCII 解码器(或等效的)处理几个字节以确定在屏幕上绘制什么。什么是x“是”,要愉快地引用总统证词,取决于你对什么是“是”的定义。

于 2013-09-26T17:13:26.383 回答
6

您始终可以创建自己的对象类,其中有一个用于数字值的槽(但如果它存储为数字,那么我们看到的 123 实际上将存储为二进制值,例如 01111011 (尽管可能与更多前导 0)) 和另一个槽或属性,用于前导 0 的数量或有效数字的数量。然后,您可以编写方法来处理数字(以及对前导 0、sig 数字等产生什么影响)。

然后 print 方法可以确保使用前导零打印它,同时将内部值保持为数字。

但这在大多数情况下似乎有点矫枉过正(尽管我知道某些字段在指示有效数字的数量方面很重要,因此前导 0 可能很重要)。使用您已经知道的转换为字符的方法可能更简单,但只需以一种看起来不像数字的方式进行打印,请参阅选项的catprint函数。

于 2013-09-26T17:34:17.400 回答