R矩阵应用函数
下面是矩阵x的例子R矩阵应用函数,r,R,下面是矩阵x的例子 x <- data.frame(c1=c(1,2,3,2,1,3), c2=c(4,5,6,2,3,4), c3=c(7,8,9,7,1,6), c4=c(4,0,9,1,5,0), c5=c(3,8,0,7,3,6), c6=c(2,8,5,0,5,7),
x <- data.frame(c1=c(1,2,3,2,1,3),
c2=c(4,5,6,2,3,4),
c3=c(7,8,9,7,1,6),
c4=c(4,0,9,1,5,0),
c5=c(3,8,0,7,3,6),
c6=c(2,8,5,0,5,7),
row.names = c("r1","r2","r3","r4","r5","r6"))
警告:
警告信息:
1: In x - cMin[] :
longer object length is not a multiple of shorter object length
2: In (x - cMin[])/(cMax - cMin) :
longer object length is not a multiple of shorter object length
3: In x - cMin[] :
longer object length is not a multiple of shorter object length
4: In (x - cMin[])/(cMax - cMin) :
longer object length is not a multiple of shorter object length
有人能解释一下如何使用包含向量(cMin或cMax)的应用函数吗?当从矩阵中减去向量时,由于矩阵的存储机制和循环规则,向量按列对齐;因此,您可以转置
矩阵
,使用cMin
,cMax
进行计算,然后将其转置回:
t((t(mat) - cMin)/(cMax - cMin))
# c1 c2 c3 c4 c5 c6
#r1 0.0 0.50 0.750 0.4444444 0.375 0.250
#r2 0.5 0.75 0.875 0.0000000 1.000 1.000
#r3 1.0 1.00 1.000 1.0000000 0.000 0.625
#r4 0.5 0.00 0.750 0.1111111 0.875 0.000
#r5 0.0 0.25 0.000 0.5555556 0.375 0.625
#r6 1.0 0.50 0.625 0.0000000 0.750 0.875
当从矩阵中减去向量时,由于矩阵的存储机制和循环规则,向量按列对齐;因此,您可以转置
矩阵
,使用cMin
,cMax
进行计算,然后将其转置回:
t((t(mat) - cMin)/(cMax - cMin))
# c1 c2 c3 c4 c5 c6
#r1 0.0 0.50 0.750 0.4444444 0.375 0.250
#r2 0.5 0.75 0.875 0.0000000 1.000 1.000
#r3 1.0 1.00 1.000 1.0000000 0.000 0.625
#r4 0.5 0.00 0.750 0.1111111 0.875 0.000
#r5 0.0 0.25 0.000 0.5555556 0.375 0.625
#r6 1.0 0.50 0.625 0.0000000 0.750 0.875
库(magrittr)
x库(magrittr)
x正如我从解决方案中看到的,目标是将每个列线性地缩放到0到1,最小值映射到0,最大值映射到1
在同一行中,无需计算cMin
和cMax
apply(x, 2,
function(each_col) (each_col - min(each_col))/diff(range(each_col)))
# c1 c2 c3 c4 c5 c6
# r1 0.0 0.50 0.750 0.4444444 0.375 0.250
# r2 0.5 0.75 0.875 0.0000000 1.000 1.000
# r3 1.0 1.00 1.000 1.0000000 0.000 0.625
# r4 0.5 0.00 0.750 0.1111111 0.875 0.000
# r5 0.0 0.25 0.000 0.5555556 0.375 0.625
# r6 1.0 0.50 0.625 0.0000000 0.750 0.875
正如我从解决方案中看到的,aim将每个列线性地缩放到0到1,最小值映射到0,最大值映射到1
在同一行中,无需计算cMin
和cMax
apply(x, 2,
function(each_col) (each_col - min(each_col))/diff(range(each_col)))
# c1 c2 c3 c4 c5 c6
# r1 0.0 0.50 0.750 0.4444444 0.375 0.250
# r2 0.5 0.75 0.875 0.0000000 1.000 1.000
# r3 1.0 1.00 1.000 1.0000000 0.000 0.625
# r4 0.5 0.00 0.750 0.1111111 0.875 0.000
# r5 0.0 0.25 0.000 0.5555556 0.375 0.625
# r6 1.0 0.50 0.625 0.0000000 0.750 0.875
我们可以复制“cMin”和“cMax”并进行计算
(mat - cMin[col(mat)])/(cMax[col(mat)] - cMin[col(mat)])
# c1 c2 c3 c4 c5 c6
#r1 0.0 0.50 0.750 0.4444444 0.375 0.250
#r2 0.5 0.75 0.875 0.0000000 1.000 1.000
#r3 1.0 1.00 1.000 1.0000000 0.000 0.625
#r4 0.5 0.00 0.750 0.1111111 0.875 0.000
#r5 0.0 0.25 0.000 0.5555556 0.375 0.625
#r6 1.0 0.50 0.625 0.0000000 0.750 0.875
我们可以复制“cMin”和“cMax”并进行计算
(mat - cMin[col(mat)])/(cMax[col(mat)] - cMin[col(mat)])
# c1 c2 c3 c4 c5 c6
#r1 0.0 0.50 0.750 0.4444444 0.375 0.250
#r2 0.5 0.75 0.875 0.0000000 1.000 1.000
#r3 1.0 1.00 1.000 1.0000000 0.000 0.625
#r4 0.5 0.00 0.750 0.1111111 0.875 0.000
#r5 0.0 0.25 0.000 0.5555556 0.375 0.625
#r6 1.0 0.50 0.625 0.0000000 0.750 0.875
你能澄清一下你需要什么吗?是否要获取每个数据点并计算(数据点-最小列)/(最大列-最小列)
?您是正确的。我想用f函数变换每个元素。你能澄清一下你需要什么吗?是否要获取每个数据点并计算(数据点-最小列)/(最大列-最小列)
?您是正确的。我想用f函数变换每个元素,该死的!你是个天才。你能简单解释一下它是怎么工作的吗?谢谢你的精彩解释。该死的!你是个天才。你能简单地解释一下它是如何工作的吗?谢谢你的精彩解释。