2014-11-26 6 views
1

저는 R이 처음입니다. 지원 벡터 머신 분석에서 더 많이 사용하기 위해 두 세트의 데이터를 읽으려고합니다. 그러나이를 극복 할 수없는 오류가 발생합니다 :에서 데이터 프레임을 만들 때 문제가 발생했습니다.

> x=read.csv("X_values_training.csv",header=F) 
> dim(x) 
[1] 66 5400 
> y=read.csv("Y_values_training.csv",header=F) 
> dim(y) 
[1] 1 66 
> dat =data.frame(x=x,y=as.factor(y)) 
Error in sort.list(y) : 'x' must be atomic for 'sort.list' 
Have you called 'sort' on a list? 

위에서 볼 수 있듯이, 저는 5400 벡터 각각 66 회의 관찰을 읽고 있습니다. "y"의 데이터는 1 또는 -1로 두 개의 클래스에 속합니다. 누구든지이 오류를 도와 줄 수 있습니까? 감사합니다.

+0

이것은 매우 혼란 스럽습니다. 당신의 목표는 무엇입니까? 66 또는 5,400 개의 서로 다른 x 변수가 있습니까? 66 개의 서로 다른 값을 가진 1 개의 변수가 있습니까? 어떻게 끝내시겠습니까? 데이터가 어떤 모습으로 보이고 '목표'데이터 세트가 어떻게 보이는지를 복사하면 도움이됩니다. – Jason

+0

제이슨, 도와 줘서 고마워. 66 개의 관측치가 5400 개의 변수로 이루어진 분류 문제가 있습니다. 따라서 X는 66 행 (관측 수) 및 5400 열 (변수 수)입니다. y는 2 개의 클래스를 나타내는 1과 -1을 포함하는 벡터입니다. 마지막으로 x와 y를 사용하여 끝에 "svm"분류를 실행합니다. –

답변

0

y은 단 하나의 행이지만 여전히 데이터 프레임입니다. 당신은 dim 속성을 가지고 있기 때문에 (1) 방금 read.csv에서 왔고 (2) 때문에 알 수 있습니다. 전체 데이터 프레임에 as.factor으로 전화를 걸 수 없습니다.

m <- mtcars[1,] 
dim(m) 
# [1] 1 11 
data.frame(m = as.factor(m)) 
# Error in sort.list(y) : 'x' must be atomic for 'sort.list' 
# Have you called 'sort' on a list? 
is.atomic(m) 
# [1] FALSE 

unlist는 감안하고 새 열을 작성하기 전에 y을 -ing보십시오. y 때문에
data.frame(m = as.factor(unlist(m))) 
#   m 
# mpg  21 
# cyl  6 
# disp 160 
# hp  110 
# drat 3.9 
# wt 2.62 
# qsec 16.46 
# vs  0 
# am  1 
# gear  4 
# carb  4 

, 당신은 대신 scan을 사용할 수 있습니다 하나의 행입니다. 이것은 또한 작동 할 수도 있습니다.

y <- scan("Y_values_training.csv", what = character(), sep = ",") 
dat <- data.frame(x = x, y = as.factor(y)) 
+0

@seyyedalipourmousavi - 아마도'y'를 읽을 때'scan'을 사용할 수 있습니다. 그렇게하면 벡터가됩니다. 어떤 경우에 당신의 후속'data.frame' 호출은 당신이 가지고있는 것처럼 작동 할 것입니다. 'scan ("Y_values_training.csv", what = character(), sep = ",") –

관련 문제