Tidyverse等价于Spark的多项式展开函数

时间:2018-07-20 19:49:01

标签: r apache-spark dplyr tidyr

availableTransports(或类似{ "Url":"/api/signalr", "ConnectionToken":"XXX", "ConnectionId":"XXX", "KeepAliveTimeout":20.0, "DisconnectTimeout":30.0, "ConnectionTimeout":110.0, "TryWebSockets":false, "ProtocolVersion":"1.2", "TransportConnectTimeout":5.0, "LongPollDelay":0.0 } 的{​​{1}}包中的任何内容是否都等同于Apache Spark的PolynomialExpansion

例如,如果我有3个变量(例如tidyversetidyverseR),我想传递变量的范围并使其交互(例如, v1 * v2v3 * v1,...)自动彼此之间。

1 个答案:

答案 0 :(得分:1)

Base R提供了formula(请参见?formula的“详细信息”部分)界面,以非常简洁的方式定义模型。 (tidyverse本身使用公式来实现很多东西。

例如(如@ user8371915所述)

model.matrix(~ b + a:c - 1, 
             data_frame(a = 1:10, 
                        b = 1:10,
                        c = 1:10))

将为您提供一个易于通过dplyr::as_data_frame“投射”的模型矩阵:

    b a:c
1   1   1
2   2   4
3   3   9
4   4  16
5   5  25
6   6  36
7   7  49
8   8  64
9   9  81
10 10 100
attr(,"assign")
[1] 1 2

同样,?formula的帮助会告诉您:

  

^运算符指示相交至指定程度。例如(a + b + c)^ 2与(a + b + c)*(a + b + c)相同,后者又扩展为包含a,b和c的主要效应以及它们的第二个效应的公式顺序互动

因此,以下内容将提供定义多项式展开式(包括截距)的正式方法

model.matrix(~ (a + b + c)^3, 
             data_frame(a = 1:10, 
                        b = 1:10,
                        c = 1:10))

formula是R中最强大的概念之一。

编辑:添加不带拦截的二度示例

aDataFrame <- data_frame(v1 = 1:10, 
                         v2 = 1:10,
                         v3 = 1:10,
                         v4 = 1:10) 

model.matrix(~ (.)^2 - . - 1, aDataFrame)

   v1:v2 v1:v3 v1:v4 v2:v3 v2:v4 v3:v4
1      1     1     1     1     1     1
2      4     4     4     4     4     4
3      9     9     9     9     9     9
4     16    16    16    16    16    16
5     25    25    25    25    25    25
6     36    36    36    36    36    36
7     49    49    49    49    49    49
8     64    64    64    64    64    64
9     81    81    81    81    81    81
10   100   100   100   100   100   100
attr(,"assign")
[1] 1 2 3 4 5 6