添加边距不起作用

时间:2014-12-02 05:39:19

标签: r

此代码:

x=c(10,20,30,40,50)
y=c(17,30,37,50,56)
my.tbl=cbind(x,y,x-mean(x),y-mean(y),(x-mean(x))*(y-mean(y)),
          (x-mean(x))^2,(y-mean(y))^2)
colnames(my.tbl)=c("x","y","x-xbar","y-ybar",
                "(x-xbar)(y-ybar)","(x-xbar)^2","(y-ybar)^2")
my.tbl
addmargins(my.tbl)

给出了这个错误:

数组错误(values,dim = newdim,dimnames = newdimnames):   长度' dimnames' [1]不等于数组范围

无法弄清楚我做错了什么。

使用R版本3.1.1(2014-07-10),RStudio版本0.98.1091

2 个答案:

答案 0 :(得分:3)

根据R帮助,"表或数组。该功能使用" dim"和" dimnames" A的属性。"。鉴于RStudent和我都发现你需要dimnames。如下所示,my.tbl没有rownames。您想要添加如下所示的rownames。然后,你将得到正确的结果。

dimnames(my.tbl)[[1]] <- c("A", "B", "C", "D", "E")
addmargins(my.tbl)

class(my.tbl)
#[1] "matrix"

str(my.tbl)
 #num [1:5, 1:7] 10 20 30 40 50 17 30 37 50 56 ...
 #- attr(*, "dimnames")=List of 2
 #..$ : NULL
 #..$ : chr [1:7] "x" "y" "x-xbar" "y-ybar" ...

或者,您可以执行以下操作来分配rownames。至少,这是在我的MAC上工作。通过转换为表格,您将获得rownames。

my.tbl2 <- as.table(my.tbl)

#class(my.tbl2)
#[1] "table"

#str(my.tbl2)
#table [1:5, 1:7] 10 20 30 40 50 17 30 37 50 56 ...
#- attr(*, "dimnames")=List of 2
#..$ : chr [1:5] "A" "B" "C" "D" ...
#..$ : chr [1:7] "x" "y" "x-xbar" "y-ybar" ...

addmargins(my.tbl2)

#       x    y x-xbar y-ybar (x-xbar)(y-ybar) (x-xbar)^2 (y-ybar)^2  Sum
#A     10   17    -20    -21              420        400        441 1247
#B     20   30    -10     -8               80        100         64  276
#C     30   37      0     -1                0          0          1   67
#D     40   50     10     12              120        100        144  476
#E     50   56     20     18              360        400        324 1228
#Sum  150  190      0      0              980       1000        974 3294

答案 1 :(得分:2)

我用rownames(my.tbl) <- 1:dim(my.tbl)[1]解决了这个问题:

> rownames(my.tbl) <- 1:dim(my.tbl)[1]
> addmargins(my.tbl)
      x   y x-xbar y-ybar (x-xbar)(y-ybar) (x-xbar)^2 (y-ybar)^2  Sum
1    10  17    -20    -21              420        400        441 1247
2    20  30    -10     -8               80        100         64  276
3    30  37      0     -1                0          0          1   67
4    40  50     10     12              120        100        144  476
5    50  56     20     18              360        400        324 1228
Sum 150 190      0      0              980       1000        974 3294