R:保持1行/列矩阵
给定一个包含一行、一列或一个单元格的矩阵,我需要在保持矩阵结构的同时对行进行重新排序。我尝试添加R:保持1行/列矩阵,r,matrix,subset,R,Matrix,Subset,给定一个包含一行、一列或一个单元格的矩阵,我需要在保持矩阵结构的同时对行进行重新排序。我尝试添加drop=F,但它不起作用!我做了什么 test = matrix(letters[1:5]) # is a matrix test[5:1,,drop=F] # not a matrix test2 = matrix(letters[1:5],nrow=1) # is a matrix test2[1:1,,drop=F] # not a ma
drop=F
,但它不起作用!我做了什么
test = matrix(letters[1:5]) # is a matrix
test[5:1,,drop=F] # not a matrix
test2 = matrix(letters[1:5],nrow=1) # is a matrix
test2[1:1,,drop=F] # not a matrix
test3 = matrix(1) # is a matrix
test3[1:1,,drop=F] # not a matrix
以下工作:
test <- matrix(test[5:1,, drop = F], nrow = 5, ncol = 1)
test问题中的代码在新的R会话中运行良好:
test = matrix(letters[1:5]) # is a matrix
result = test[5:1,,drop=F]
result
# [,1]
# [1,] "e"
# [2,] "d"
# [3,] "c"
# [4,] "b"
# [5,] "a"
class(result) # still a matrix
# [1] "matrix"
dim(result)
# [1] 5 1
即使在1x1矩阵上:
test3 = matrix(1) # is a matrix
result3 = test3[1:1,,drop=F]
class(result3)
# [1] "matrix"
dim(result3)
# [1] 1 1
也许您已经加载了其他覆盖默认行为的包?是什么让你觉得你最终没有得到一个矩阵?我猜这是一个被覆盖的F
F
可以设置为变量,在这种情况下,它不再为false。始终完全写出FALSE
,不能将其设置为变量
看
第8.1.32节也是一个很好的参考
> F <- 1
> test = matrix(letters[1:5]) # is a matrix
> test[5:1,,drop=F] # not a matrix
[1] "e" "d" "c" "b" "a"
> test[5:1,,drop=FALSE] # but this is a matrix
[,1]
[1,] "e"
[2,] "d"
[3,] "c"
[4,] "b"
[5,] "a"
> rm(F)
> test[5:1,,drop=F] # now a matrix again
[,1]
[1,] "e"
[2,] "d"
[3,] "c"
[4,] "b"
[5,] "a"
>F test=matrix(字母[1:5])#是一个矩阵
>测试[5:1,drop=F]#不是矩阵
[1] “e”“d”“c”“b”“a”
>测试[5:1,drop=FALSE]#但这是一个矩阵
[,1]
[1,]“e”
[2,]“d”
[3,]“c”
[4,]“b”
[5,]“a”
>rm(F)
>测试[5:1,drop=F]#现在又是一个矩阵
[,1]
[1,]“e”
[2,]“d”
[3,]“c”
[4,]“b”
[5,]“a”
但as矩阵会将一行2列矩阵转换为两行1列矩阵。我需要一些可以保留原始尺寸的东西。@dasf我已经编辑了我的答案。它回答了你的问题吗?结果是一个矩阵,结果矩阵的行和列可以根据您的需要预先指定(例如5行和1列)。似乎不必要的复杂…好的,这可以工作,但我必须找出矩阵有多少行和列。我刚刚意识到,我可以通过做一些像dim(new)=dim(old)
@Gregor这样的事情,将重新排序的非矩阵强制转换为原始矩阵的维度。我在主题启动者要求的行和列中添加了它,是的,你的答案也很有效,而且更简洁。class(test[5:1,drop=F])
给了我一个矩阵。是的,重新启动RStudio后,一切恢复正常。我不知道发生了什么。你可以使用base::[
来确保你没有得到一些重新映射的[
。我想这更可能是一个被覆盖的F
;F可以设置为变量,在这种情况下,它不再是false。始终完整地写出false
,它不能设置为变量。(详情请参阅答案。)嘿@dasf,我要编辑它,这样它看起来就不会像是一个不可重复的错误。嗯,你是对的。代码在我重新启动Rstudio后确实可以工作。我想知道是什么导致了这种情况。让我做一点实验,然后向小组报告。嘿,Gregor,我想我们应该重新打开这个,你看一看吗?@Aaron我不同意。分配变量T
或F
是一个常见问题。因为这是一个非常特殊的系统,所以drop=F
不起作用。如果有什么问题,我会将其标记为已链接的“使用T&F而不是TRUE&FALSE有什么问题吗?”问题。你认为重新开始这个问题有什么好处?这可能是一个常见的问题,但它不是一个明显的答案(从我之前的答案和急于结束之前的答案可以看出)。我认为,对于可能有这个问题的未来读者,有一个明确回答这个问题的问题是有价值的。标记为dup可能有效,但实际上,这是一个重复的答案,但不是一个重复的问题。当然,它不再脱离主题,因为它不能被复制。您是否也会为其创建q/a对“为什么na.rm=T
不适用于mean
?”“为什么stringsAsFactors=F”
不适用?”等等?这个问题必须有某种程度的概括性,否则就是荒谬的,这就是为什么标记为dupe对我来说似乎是合适的。我不认为上面的Q是一个理想的dupe目标,但可能是关注一般问题,可能是一个新的R-FAQ“为什么t
和F
不适用于TRUE
和FALSE
?”(如果这样的东西还不存在的话)。如果你想把它编辑成一般性的东西,并且OP是可以接受的,我很乐意接受这个解决方案。这正是发生的事情!谢谢!