此代码:
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
答案 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