2012-01-10 1 views
0

기존 행렬 m의 특정 원소 (index)에 변수 f을 쓰고 싶습니다.Factor, levels, and original values ​​

f <- factor(c(3,3,0,3,0)) 
m <- matrix(NA, 10, 1) 
index <- c(1,4,5,8,9) 

m[index] <- f 

m에 ('2'를 '1'등)가 레이블을 그리 듯 원하는 결과를 제공하지 않습니다 사용하지만 원래 값 (:의는 f 가정하자 요인입니다 '0'및 '3'). 따라서 대신 잘 사용되는

m[index] <- as.numeric(levels(f))[f] 

을 사용했습니다.

하지만 내 상황에서

, f 항상 요인이 아니라도
f <- c(3.43, 4.29, 5.39, 7.01, 7.15) 

내가

if (is.factor(f)) { 
    m[index] <- as.numeric(levels(f))[f] 
} else { 
    m[index] <- f 
} 

처럼 확인해야 또는 "보편적 인"방법이 있나요 같은 숫자 일 수있다 f의 "true"값을 m 행렬에 f 유형과 관계없이 둡니다.

미리 감사드립니다.

P.S : 배경이 fmodelmodel <- svm(Xtrain, Ytrain)에 의해 훈련을받은 SVM 모델이며, 분류 일 모델 일이 될 수 있습니다 f <- predict(mymodel, Xnew)의 결과인지 또는 회귀 모형 (다음 f는 요인이다) (다음 f는 숫자입니다). 모델의 유형을 알고 있지만 위의 if 절이 다소 불편한 것처럼 보입니다.

+2

당신이 대신 행렬의 data.frame을 사용할 수 있습니까? Data.frames는 데이터 형식과 관련하여보다 융통성이 있으며 매트릭스는 문자 또는 숫자 만 사용합니다. –

답변

3

왜 그냥하지 : 첫 번째 숫자에 다음 문자 (숫자 또는 요소가 될 수 있음) f를 변환 :

m[ index ] <- as.numeric(as.character(f)) 
+0

고마워요, 이건 아주 간단하고 모든 상황에서 효과가있는 것 같습니다! – Kilian

1

매트릭스 유형은 "요인"일 수 없습니다. 요인을 별도로 처리해야합니다. 가장 쉬운 방법은 문자열로 변환하는 것입니다.

if(is.factor(f)) { 
    m[index] <- as.character(f) 
} else { 
    m[index] <- f 
}