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