我想知道print()
函数的一个非常基本的行为,但我找不到解释。
如果我向向量添加name()
,则不会获得前缀([1]
)。最小示例:
x <- 1
names(x) <- "name"
print(x)
y<-2
print(y)
输出:
print(x)
名称
1
和
print(y)
[1] 2
我想知道names()
是否通过添加属性来更改类或类似内容。但是typeof()
和class()
确实为x和y提供了相同的值。因此,我认为这是print()
函数,当给定属性时,该函数不提供前缀作为输出。 print()
何时使用前缀[x]
,何时不使用前缀?
答案 0 :(得分:3)
在第一种情况下,对象x是数字矢量,没有属性。在第二个中-对象y也是数字矢量,但具有属性“名称”:
x <- 1
attributes(x)
# NULL
y <- 1
names(y) <- "value"
attributes(y)
# $`names`
# [1] "value"
在两种情况下,都使用print.default()方法显示对象的值。此函数调用.Internal(print.default(x, digits, quote, na.print, print.gap,
right, max, useSource, noOpt))
。
查看此函数的源代码(例如,此处为https://github.com/wch/r-source/blob/trunk/src/main/print.c),我们可以看到,取决于矢量是否具有属性,输出是否包含每条输出行上第一个元素的索引:
if((dims = getAttrib(s, R_DimSymbol)) != R_NilValue && length(dims) > 1) {
...
}
else { // no dim()
...
sprintf(ptag, "[[%d]]", i+1);
...
}