Matrix R中的多项式函数展开

Matrix R中的多项式函数展开,matrix,r,polynomials,Matrix,R,Polynomials,我目前正在复习关于的这个问题,看到OP说明,通过添加更多for循环,可以扩展多项式。你到底会怎么做?我正试图扩展到多元5 代码如下: polyexp = function(df){ df.polyexp = df colnames = colnames(df) for (i in 1:ncol(df)){ for (j in i:ncol(df)){ colnames = c(colnames, paste0(names(df)[i],'.',names(df)

我目前正在复习关于
的这个问题,看到
OP
说明,通过添加更多for循环,可以扩展多项式。你到底会怎么做?我正试图扩展到多元5

代码如下:

polyexp = function(df){
  df.polyexp = df
  colnames = colnames(df)
  for (i in 1:ncol(df)){
    for (j in i:ncol(df)){
      colnames = c(colnames, paste0(names(df)[i],'.',names(df)[j]))
      df.polyexp = cbind(df.polyexp, df[,i]*df[,j])
    }
  }
  names(df.polyexp) = colnames
  return(df.polyexp)
}
最后,我想对顺序进行排序,以便它按度的顺序展开。我尝试使用poly函数,但我不确定是否可以对结果进行排序,使其返回一个从阶数1开始,然后移动到阶数2,然后移动到阶数3、4和5的值。

到“按阶排序”有点含糊不清
x^2和
x*y
都有学位2。我假设您想按总的程度排序,然后在每个范围内,按第1列的程度排序;在该范围内,按第二列的程度排序,等等(我认为默认设置是忽略总程度并按最后一列的程度排序,在第二列的范围内排序,等等,但这没有文档记录,所以我不会指望它)

以下是如何使用
polym
来完成此操作。这些列的名称类似于
“2.0”
“1.1”
。您可以按字母顺序对这些名称进行排序,最高可以达到9级,但如果您使用
将这些名称转换为.numeric\u version
,则没有限制。因此,将列名转换为版本名,获得排序顺序,并使用该加度对结果的列重新排序。比如说,

df3.0.0.0.4 0.1.3 0.2.2 0.3.1 0.4.0
#> -0.37267800  0.18898224 -0.22271770  0.29761905 -0.22271770  0.18898224 
#>       1.0.3       1.1.2       1.2.1       1.3.0       2.0.2       2.1.1 
#> -0.22271770  0.19483740 -0.19483740  0.22271770  0.29761905 -0.19483740 
#>       2.2.0       3.0.1       3.1.0       4.0.0       0.0.5       0.1.4 
#>  0.29761905 -0.22271770  0.22271770  0.18898224  0.06299408 -0.11293849 
#>       0.2.3       0.3.2       0.4.1       0.5.0       1.0.4       1.1.3 
#>  0.20331252 -0.20331252  0.11293849 -0.06299408 -0.11293849  0.13309928 
#>       1.2.2       1.3.1       1.4.0       2.0.3       2.1.2       2.2.1 
#> -0.17786140  0.13309928 -0.11293849  0.20331252 -0.17786140  0.17786140 
#>       2.3.0       3.0.2       3.1.1       3.2.0       4.0.1       4.1.0 
#> -0.20331252 -0.20331252  0.13309928 -0.20331252  0.11293849 -0.11293849 
#>       5.0.0 
#> -0.06299408

由(v0.3.0)于2020-03-21创建

polym
返回每个术语的程度。如果不是按你想要的顺序,你可以对它排序。有没有办法按多项式次数排序?