R矩阵应用函数

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的例子

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函数变换每个元素,该死的!你是个天才。你能简单解释一下它是怎么工作的吗?谢谢你的精彩解释。该死的!你是个天才。你能简单地解释一下它是如何工作的吗?谢谢你的精彩解释。