해결 방법: colmeans(x, na.rm = true)의 오류: 'x'는 숫자여야 합니다.


R을 사용할 때 발생할 수 있는 오류 메시지는 다음과 같습니다.

 Error in colMeans(x, na.rm = TRUE): 'x' must be numeric

이 오류는 일반적으로 사용 중인 데이터 프레임의 하나 이상의 열이 숫자가 아닌 경우 R에서 주성분 분석을 수행하기 위해 prcomp() 함수를 사용하려고 할 때 발생합니다.

이 오류를 해결하는 방법에는 두 가지가 있습니다.

방법 1: 숫자가 아닌 열을 숫자 열로 변환

방법 2: 데이터 프레임에서 숫자가 아닌 열 제거

다음 예에서는 각 방법을 실제로 사용하는 방법을 보여줍니다.

오류를 재현하는 방법

문자 열이 포함된 다음 데이터 프레임에 대해 주성분 분석을 수행한다고 가정합니다.

 #create data frame
df <- data. frame (team=c('A', 'A', 'C', 'B', 'C', 'B', 'B', 'C', 'A'),
                 points=c(12, 8, 26, 25, 38, 30, 24, 24, 15),
                 rebounds=c(10, 4, 5, 5, 4, 3, 8, 18, 22))

#view data frame
df

  team points rebounds
1 to 12 10
2 to 8 4
3 C 26 5
4 B 25 5
5 C 38 4
6 B 30 3
7 B 24 8
8 C 24 18
9 to 15 22

#attempt to calculate principal components
prcomp(df)

Error in colMeans(x, na.rm = TRUE): 'x' must be numeric

컬럼은 문자 컬럼이므로 prcomp() 함수를 사용하려고 할 때 오류가 발생합니다.

방법 1: 숫자가 아닌 열을 숫자 열로 변환

이 오류를 방지하는 한 가지 방법은 prcomp() 함수를 사용하기 전에 열을 숫자 열로 변환하는 것입니다.

 #convert character column to numeric
df$team <- as. numeric (as. factor (df$team))

#view updated data frame
df

  team points rebounds
1 1 12 10
2 1 8 4
3 3 26 5
4 2 25 5
5 3 38 4
6 2 30 3
7 2 24 8
8 3 24 18
9 1 15 22

#calculate main components
prcomp(df)

Standard deviations (1, .., p=3):
[1] 9.8252704 6.0990235 0.4880538

Rotation (nxk) = (3 x 3):
                 PC1 PC2 PC3
team -0.06810285 0.04199272 0.99679417
points -0.91850806 0.38741460 -0.07907512
rebounds 0.38949319 0.92094872 -0.01218661

이번에는 데이터 프레임의 각 열이 숫자이기 때문에 오류가 발생하지 않습니다.

방법 2: 데이터 프레임에서 숫자가 아닌 열 제거

오류를 방지하는 또 다른 방법은 prcomp() 함수 를 사용하기 전에 데이터 프레임에서 숫자가 아닌 모든 열을 제거하는 것입니다 .

 #remove non-numeric columns from data frame
df_new <- df[ , unlist(lapply(df, is. numeric ))]

#view new data frame
df_new

  rebound points
1 12 10
2 8 4
3 26 5
4 25 5
5 38 4
6 30 3
7 24 8
8 24 18
9 15 22

#calculate main components
prcomp(df_new)

Standard deviations (1, .., p=2):
[1] 9.802541 6.093638

Rotation (nxk) = (2 x 2):
                PC1 PC2
points 0.9199431 0.3920519
rebounds -0.3920519 0.9199431

다시 말하지만, 데이터 프레임의 각 열은 숫자이기 때문에 오류가 발생하지 않습니다.

참고 : 대부분의 경우 첫 번째 방법은 특정 열을 제거하는 대신 모든 데이터를 사용하므로 선호되는 솔루션입니다.

추가 리소스

다음 튜토리얼에서는 R의 다른 일반적인 오류를 수정하는 방법을 설명합니다.

R에서 수정하는 방법: 인수에 다른 줄 수가 포함됩니다.
R에서 수정하는 방법: 사용하지 않는 인수를 선택하는 중 오류가 발생했습니다.
R에서 복구하는 방법: 교체 길이가 0입니다.

의견을 추가하다

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다