저는 R에서 초보자이고 코드에서 특별한 경우를 디버깅하려고합니다. 다음 행에서 벡터가 확실히 존재하는 열을 기반으로 정렬 된 벡터 x
을 얻는 중입니다. 당연히, 나는 sorted.data
이 동일하고 대부분의 경우에 그럴 것이라고 기대합니다.return type of() in R
print (paste("x=",typeof(x)))
print (x)
sorted.data <- x[order(x[[max.column]]), ]
print (paste("type of sorted=", typeof(sorted.data)))
print (sorted.data)
위의 코드의 출력은 다음과 같습니다
[1] "x= list"
V1 V5
8 10 0
16 7 0
18 7 0
20 1 96
24 9 0
[1] "type of sorted= list"
V1 V5
8 10 0
16 7 0
18 7 0
24 9 0
31 5 0
그러나 어떤 시점에서
, 출력은 : 무엇이 잘못 갈 수[1] "x= list" # Expected. a vector with 1 column
V1
8 10
16 7
18 7
24 9
26 10
[1] "type of sorted= integer" # This shouldn't happen
[1] 0 0 0 1 1 1 1 2 2 3 3 4 4 4
? 반환 값이 변경되는 이유는 무엇입니까?
'의 X [순서 (X [[max.column]])]' 실제로'list' 일 경우에는 작동하지 않아야합니다. 이것이'data.frame'이 아닌 것이 확실합니까? (이것이 어쨌든 여기에 표시되는 방법입니다.)'data.frame'이라고 가정하고, 행을 색인 할 때 기본 모드, "결과는 가능한 가장 작은 차원으로 강제 변환됩니다"*, 하나의 열이 의미 할 때 그것은 벡터에 강제된다. 'x [order (x [[max.column]]) ,, drop = TRUE]'를 사용해보십시오. (['help ("[["''] (https://stat.ethz.ch/R-manual/R-devel/library/base/html/Extract.html)을 참조하십시오.) – r2evans
@ r2evans 사실, drop = FALSE'이어야합니다. (그냥 테스트 해 보았습니다.)'sorted.data <- x [order (x [[ncol (x)]),, drop = FALSE]'. –
물론 ... 양쪽면을 테스트하여 잘못된 것을 복사/붙여 넣기했는지 확인해 주셔서 감사합니다. – r2evans