我想测试对象是否是R中的向量。我对为什么感到困惑
is.vector(c(0.1))
返回TRUE,
is.vector(0.1)
我希望当它只是一个数字时返回false,而当它是一个矢量时返回true。有人可以为此提供任何帮助吗?
非常感谢。
答案 0 :(得分:1)
正如@RHertel所提到的,R认为c(0.1)
是长度为1的向量。您可能还想测试length
。例如。
> x <- 1
> y <- 1:2
> is.vector(x) & length(x) > 1
[1] FALSE
> is.vector(y) & length(y) > 1
[1] TRUE
答案 1 :(得分:1)
在R中,不存在单个数字或字符串。它们是长度为1的向量。或者嵌入到一些更复杂的结构中。
is.vector(c(0.1))
和is.vector(0.1)
在R中绝对相同。
这也是原因,length("this is a string/character")
返回1
的原因-因为在这种情况下,length()
测量向量中的元素数。
如果您在R控制台中输入"this is a string/character"
,就会看到它:
返回[1] "this is a string/character"
-[1]
指示:长度为1的向量。
因此,您必须执行nchar("this is a string/character")
才能获得第一个元素的长度-字符字符串-返回26
。
nchar(c("this is a string/character", "and this another string"))
## [1] 26 23
## nchar is vectorized as you see ...
这与Python的重要区别在于Python的字符串和数字可以独立存在。
因此len("this")
在Python中返回4。 len(["this"])
但是为1(列表中为1个元素,因此列表的长度为1)。