这种语言使我困惑.实体有modesclasses,但即使这样也不足以充分描述实体.

这个answer表示

在R中,每个"对象"都有一个模式和一个类.

所以我做了这些实验:

> class(3)
[1] "numeric"
> mode(3)
[1] "numeric"
> typeof(3)
[1] "double"

到目前为止还不错,但后来我通过了一个向量:

> mode(c(1,2))
[1] "numeric"
> class(c(1,2))
[1] "numeric"
> typeof(c(1,2))
[1] "double"

这没有道理.一个整数向量应该和一个整数有不同的类,或者不同的模式?我的问题是:

  • R里的所有东西都有(正好一个)class吗?
  • R里的所有东西都有(正好一个)mode吗?
  • "typeof"告诉我们什么?
  • 完整描述实体还需要哪些其他信息?(例如,"矢量"存储在哪里?)

Update:显然,文字3只是长度为1的向量.没有标量.好吧,但是...我try 了mode("string"),得到了"character",这让我觉得字符串是一个字符向量.但如果这是真的,那么这应该是真的,但事实并非如此!c('h','i') == "hi"

推荐答案

我同意R中的类型系统很奇怪.之所以如此,是因为它已经进化了很长一段时间...

请注意,您又错过了一个类函数storage.mode和一个类函数oldClass.

所以,modestorage.mode是旧式类型(其中storage.mode更准确),typeof是更新的,甚至更准确的版本.

mode(3L)                  # numeric
storage.mode(3L)          # integer
storage.mode(`identical`) # function
storage.mode(`if`)        # function
typeof(`identical`)       # closure
typeof(`if`)              # special

那么class是一个完全不同的故事.class基本上只是对象的class属性(这正是oldClass返回的值).但是,如果未设置class属性,class函数将根据object type和dim属性组成一个类.

oldClass(3L) # NULL
class(3L) # integer
class(structure(3L, dim=1)) # array
class(structure(3L, dim=c(1,1))) # matrix
class(list()) # list
class(structure(list(1), dim=1)) # array
class(structure(list(1), dim=c(1,1))) # matrix
class(structure(list(1), dim=1, class='foo')) # foo

最后,该类可以返回多个字符串,但前提是class属性是这样的.然后,主类的第一个字符串值为kind of,以下是它继承的字符串值.组合类的长度始终为1.

# Here "A" inherits from "B", which inherits from "C"
class(structure(1, class=LETTERS[1:3])) # "A" "B" "C"

# an ordered factor:
class(ordered(3:1)) # "ordered" "factor"

R相关问答推荐

了解.groups的目的= dØr的摘要功能中的删除

棒棒糖图表大小和线宽参数故障标签未出现

在发布到PowerBI Service时,是否可以使用R脚本作为PowerBI的数据源?

用黄土法确定区间

r替换lme S4对象的字符串的一部分

是否可以创建一个ggplot与整洁判断的交互作用

如何自定义3D散点图的图例顺序?

将数字转换为分钟和秒

提取一个列表中单个列的重复观察结果R

为了网络分析目的,将数据框转换为长格式列联表

展开对数比例绘图的轴(添加填充)

从圆到R中的多边形的标绘雷达图

在R函数中使用加号

如何将Which()函数用于管道%>;%

如何从向量构造一系列双边公式

停止ggplot将多行减少到一行

按组跨多列创建伪变量

对R中的列表列执行ROW Mean操作

构建一个6/49彩票模拟系统

按组使用dummy r获取高于标准的行的平均值