R中的下标超出范围错误

时间:2014-10-30 04:58:06

标签: r

我是R的新手,我遇到了一个奇怪的错误。我有这样的表:

 dat<-c(1,2,3,4,4,53,62,345,3,4,346,23,34,52,34,2345,23,4)
 dat.table<-table(dat)

这会创建一个表,我想从此表中获取一个特定的列。当我尝试dat.table[[3]]时,它给出了2,这是向量中3的真实出现。但是,当我尝试dat.table[[2345]]时,虽然rownames(dat.table)中存在2345,但它会出现以下错误:

Error in b[[2345]] : subscript out of bounds

这可能是一个基本问题,但奇怪的是为什么R对不同的rownames表现不同!! 我感谢任何帮助。

2 个答案:

答案 0 :(得分:1)

访问data.table项目:

dat.table['2345']
2345 
   1 

dat.table不是data.frame。请尝试以下方法:

ddf = data.frame(dat.table)
ddf
    dat Freq
1     1    1
2     2    1
3     3    2
4     4    4
5    23    2
6    34    2
7    52    1
8    53    1
9    62    1
10  345    1
11  346    1
12 2345    1

 ddf[12,]
    dat Freq
12 2345    1

ddf[12,2]
[1] 1

hd [[in]]给定列号i:

ddf[[1]]
 [1] 1    2    3    4    23   34   52   53   62   345  346  2345
Levels: 1 2 3 4 23 34 52 53 62 345 346 2345

ddf[[2]]
 [1] 1 1 2 4 2 2 1 1 1 1 1 1

对于wide data.frame:

tt = data.frame(t(ddf))

tt
     X1 X2 X3 X4 X5 X6 X7 X8 X9 X10 X11  X12
dat   1  2  3  4 23 34 52 53 62 345 346 2345
Freq  1  1  2  4  2  2  1  1  1   1   1    1

答案 1 :(得分:1)

偶然地,“{3”的出现存储在dat.table的第3列中。

让我们试试这个例子(添加2个零):

dat <- c(0,1,2,3,4,4,53,62,345,3,4,346,23,34,0,52,34,2345,23,4)
dat.table[[3]]
[1] 1

哎呀,错误的价值。现在,让我们试试

dat.table[["3"]]
[1] 2

正确

“2345”是一个字符,列的名称。键入dat.table[[2345]]时,您尝试访问不存在的第2345个元素。您需要指定列的名称

dat <- c(1,2,3,4,4,53,62,345,3,4,346,23,34,52,34,2345,23,4)
dat.table <- table(dat)
dat.table[["2345"]]
[1] 1