R和只有1行的矩阵

5

在R中是否可能有只有一行的矩阵?

以下是我的代码:

   nas <- which(!is.na(y))   
   x <- x[nas,]
   y <- y[nas]

   ...
   data.frame(y,x)

这个想法是,我有一个向量y和矩阵x。Y可能包含一些NA值,我想找到并从向量和矩阵中删除这些值的索引。

后来我想用x来框架y。问题是,当y中只有一个非NA值时。这意味着我必须从y中删除除1个元素以外的所有元素,并从x中删除除1行以外的所有行,这样就会得到仅有1行的矩阵,似乎会被转换为数字,从而破坏data.frame操作。我希望它返回包含1行的框架:y x1 x2 ..,但实际上我得到的是:

   y    x
1  0 12.0
2  0 14.8
3  0 14.2
4  0 14.8
5  0  2.0
6  0  4.0
7  0  1.0
8  0  2.0
9  0 26.0
10 0  4.0
11 0  6.0
12 0  2.0
13 0 16.0

1
当然可以拥有只有1行的矩阵。例如, matrix(1:4, nrow=1) - JACKY88
是的,但它不是立即转换为数字吗?或者至少在我的代码中似乎是这种情况。 - Arg
2个回答

28

你需要指定drop = FALSE,以防止R将矩阵或数组强制转换为最低可能的维度。有关更多详细信息,请参见?`[`

x <- matrix(1:4,ncol=2)
x[1,]
## [1] 1 2
x[1,,drop=F]
##      [,1] [,2]
## [1,]    1    3

3
谢谢,那就是问题所在!程序员们在没有Stack Overflow的情况下是如何生存的 :) - Arg
谢谢!我已经为此苦苦挣扎多年了(RTFM,对吧?)。有没有办法将(drop=F)作为默认行为呢? - morispaa
1
@morispaa,通过在您的环境中重新定义函数“[`”并使用省略号技巧,可以使drop=F成为默认设置。 - Theja Tulabandhula
1
我希望这是默认操作。这些类型的事情会让新用户远离 R。 - MadmanLee
1
@MadmanLee 我至少浪费了20分钟时间才找出问题所在。 - vasili111
显示剩余2条评论

3
正如Patrick Li在评论中指出的那样,如果您使用vector()函数创建它,则是这样的。
因此:
R> matrix(1:4, nrow=1)
     [,1] [,2] [,3] [,4]
[1,]    1    2    3    4
R> matrix(1:4, ncol=1)
     [,1]
[1,]    1
[2,]    2
[3,]    3
[4,]    4
R> matrix(1:4, ncol=2)
     [,1] [,2]
[1,]    1    3
[2,]    2    4
R>     

有关使用matrix()的更多选项,请参阅其帮助页面。有关非常基本问题(提示:drop=FALSE)的更多信息,请参阅R FAQ


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接