小编Tri*_*tio的帖子

R中的模式和类有什么区别?

我正在学习R(我本周才开始),我一直在努力学习typeof,mode,storage.mode和class的概念.我一直在上下搜索(官方R文档,StackOverflow,谷歌等),我无法找到任何明确的解释这些之间的区别.(一些StackOverflow CrossValidated答案并没有真正帮助我解决问题.)最后(我希望),我想我明白了,所以我的问题是验证我的理解是否正确.

mode vs storage.mode: mode和storage.mode基本相同,除了处理"单一"数据类型的微小差别.

mode vs typeof: 非常相似,除了一些差异,最值得注意的是两者(typeof"integer"和"double")=(mode"numeric"); 两者(typeof"special"和"builtin"=(mode"function").

class: Class基于R的面向对象的类层次结构.我很难找到这个图形化的布局,但我能找到的最好的是这个图:

rpy2 robjects包

(如果有人能指出我更准确的R类层次结构,我会替换它.)

虽然类名与R class()函数的结果不完全对应,但我认为层次结构基本上是准确的.我的理解是对象的"类" - 即class()函数的结果 - 是层次结构中的根类.因此,例如,"Vector"不是根类,因此它永远不会显示为class()函数的结果.根类可能更像是"StrVector"("字符")或"BoolVector"("逻辑").相比之下,"矩阵"本身就是一个根类; 因此,它的类是"矩阵".

显然,R支持多重继承,因此一些对象可以有多个类.

typeof/mode/storage.mode vs class:这是我最难理解的部分.我现在的理解是:typeof/mode/storage.mode(我将其称之为"模式")基本上是R对象可以作为其值之一保存的最复杂的数据类型.因此,例如,由于矩阵,数组和向量只能包含一个向量数据类型,因此它们的模式(即它们可以容纳的最复杂的数据类型)通常是数字,字符或逻辑,即使它们的类(它们在类中的位置)等级)是完全不同的东西.

这最有趣的地方(也就是混乱)就像列表这样的对象."列表"模式意味着对象中的每个值本身可以是一个列表(即,可以包含不同数据类型的对象).因此,无论类本身是否为"列表",都有多个对象(例如数据帧)可以包含不同的值,因此其模式是"列表",即使它们的类是其他的.

总而言之,我的理解是:

  • typeof/mode/storage.mode(几乎相同的东西)基本上是R对象可以作为其值之一保存的最复杂的数据类型; 而

  • class是根据R类层次结构的对象的面向对象分类.

我的理解准确吗?如果没有,有人可以给出更准确的解释吗?

r

38
推荐指数
5
解决办法
2万
查看次数

为什么需要在 ERD 中指明识别或非识别关系?

在 ERD 中,弱/非识别关系是连接两个强实体的关系,用虚线表示。强/识别关系是一种将强实体连接到弱实体的关系(弱实体是一种包含来自其相关实体的外键 [FK] 作为其自己的主键 [PK] 的组成部分),并被指示用实线。

我的问题是,那又怎样?为什么区分弱/非识别关系与强/识别关系如此重要,以至于 ERD 设计者应该分别用虚线和实线进行区分?为什么这么重要?

对我来说,ERD 中的每个元素和约定都应该添加必要的信息,这些信息要么直接转换为数据库设计(即 DDL SQL 语句),要么至少解释重要但不一定明显的信息(以及最后一种情况的示例)将命名关系 - 它们不会转换为 SQL,但它们对于理解 ERD 非常有用)。为了讨论起见,这是一个示例 ERD(从另一个 StackOverflow 问题修改而来):

样品ERD

我已经考虑了很多,对我来说,实线与虚线添加的唯一信息已经在以下约定中得到充分传达:

  • FK 是否是实体 PK 的一部分(示例 ERD 中的 PK,FK1 或 PK,FK2)。
  • FK 是必需属性(粗体)还是可选属性(非粗体)。

据我所知,实线与虚线的关系线没有增加额外的有用信息。这种约定不是添加信息,而是不直观且非常混乱。作为它们造成的混淆的一个例子,StackOverflow 上有许多重复的问题,询问哪个是哪个;这里只是几个例子:

任何人都可以向我解释约定添加的哪些附加信息不包含在 FK 可能是也可能不是 PK 的一部分这一事实中?我正在认真考虑完全忽略约定(也就是说,我想开始用所有实线绘制我的 ERD),但如果有人能指出我忽略的重要内容,我将不胜感激。

database-design erd foreign-keys composite-primary-key

5
推荐指数
1
解决办法
4958
查看次数

使用 R |> 管道链接算术运算符

这基本上与dplyr with %>% pipeline 中的链算术运算符相同的问题,但针对新的(如 R 4.1)管道运算符进行了更新|>

如何将算术运算符与 R 本机管道链接起来|>使用 dplyr/magrittr,您可以对算术运算符使用反引号,但这不适用于内置的 R 管道运算符。这是一个简单的例子:

R.version$version.string
# [1] "R version 4.2.2 (2022-10-31 ucrt)"

x <- 2
# With dplyr/magrittr, you can use backticks for arithmetic operators
x %>% `+`(2)
# [1] 4

# But that doesn't work with the inbuilt R pipe operator
x |> `+`(2)
#  Error: function '+' not supported in RHS call of a pipe
Run Code Online (Sandbox Code Playgroud)

希望答案足够通用,适用于通常不能与本机 R 管道很好地配合的任何运算符或内置函数(我的版本是 R 4.2.2)。

答案/sf/answers/5046054471/有很多关于 …

r arithmetic-expressions pipe

4
推荐指数
1
解决办法
254
查看次数

如何从 DataCamp 导出数据?

我使用DataCamp在线学习R。有时我想导出练习中使用的数据,但我找不到简单的方法。

我知道有下载视频或幻灯片的说明,有些课程在课程描述中提供了一些选定的数据集供下载。但是,如何下载可以通过 DataCamp 练习界面访问的数据,以便导出到平台之外呢?

r web-scraping

2
推荐指数
1
解决办法
2721
查看次数

Rcpp 可以用来加速对其他 R 函数的调用吗?

我正在编写一个用于统计分析和机器学习 (ML) 的 R 包,该包通常非常慢。它很慢,因为它涉及训练和预测模型,包括统计和机器学习。我的包与模型无关,我的意思是它与 R 中的任何其他模型训练和预测包接口,以重新训练他们的模型并使用他们的模型进行预测。经过广泛的分析和代码重构(主要是通过尽可能多地转换为向量化和矩阵运算),我发现无法通过重构进一步加快速度的慢点归结为以下代码:

  • 从其他 R 包调用预测函数。我的主程序可能会调用预测函数数千次,因此即使需要 0.1 秒的预测函数也可能导致我的函数需要花费几分钟甚至几个小时才能运行。
  • 从其他 R 包中调用训练模型。我的一些程序将输入模型重新训练 100 到 1000 次。因此,1 秒的模型训练时间大约需要 17 分钟才能运行。比这更慢的训练时间变得非常难以管理。

我想知道Rcpp是否可以帮助加快我的情况。请注意我在这里没有问什么:

  • 我并不是在问我是否真的需要多次运行和预测模型。我正在单独探讨这个重要问题;我确实在努力尽可能地减少这些需求。因此,我的提问是基于这样的假设:我确实需要经常运行模型和预测。
  • 我当然打算实现并行处理来帮助缓解问题,但这只是一个有限的解决方案。即使某些用户拥有多达 10 个物理计算机核心(很少有用户拥有),将我上面给出的示例速度除以 10 仍然会导致代码缓慢。我正在尝试走得更远。并行处理将是我能做的任何其他事情的额外解决方案。

我对Rcpp是否有帮助的主要疑问是,最慢的代码是当我调用其他包的 R 函数时。我已经阅读了大量有关 Rcpp 的文章,甚至正在参加有关该主题的 DataCamp 课程。然而,从我目前对 Rcpp 的探索来看,尽管许多资料解释了为什么我们要使用 Rcpp(以加速缓慢的 R 代码),但我无法找到任何资料来清楚地说明 Rcpp 无法帮助解决哪些问题。

据我所知,Rcpp 在调用 R 函数时无法提供任何加速。减慢我的代码速度的函数是由其他包编写的函数。例如,我有一篇文章演示了我的包功能,分别使用nnet::nnet()nnet::predict.nnet()来训练和预测神经网络,以及分别使用gbm::gbm()gbm::predict.gbm()来训练和预测梯度增强机。有没有办法使用Rcpp来优化这些函数的调用?

如果我可以Rcpp::cppFunction()实时调用来接收这些函数,将它们编译为 C++,然后继续用我的程序执行它们,那么这可能是一个可行的解决方案。但这对于 Rcpp 来说可能吗?我将不胜感激这里的任何指导。我愿意接受一个明确解释的答案:“不,Rcpp 无法帮助您解决问题,原因如下。”

algorithm optimization r rcpp

0
推荐指数
1
解决办法
102
查看次数