2016-09-16 3 views
3

내 질문에 대한 설명 :목록에 여러 유형이 있습니까?

데이터 마이닝 알고리즘을 구현하는 프로그램을 작성 중입니다. 이 프로그램에서 나는 생각해야 할 입력 데이터를 저장하려고합니다. 입력 데이터가 행과 열이있는 테이블이라고 상상해보십시오. 각 행은 스칼라 클래스 (해당 스칼라 클래스)의 인스턴스로 나타낼 것이다. 입력 데이터의 열은 서로 다른 유형 (정수, Double, String 등) 일 수 있으며 입력 데이터에 따라 어떤 유형이 변할 수 있습니다. Scala 클래스 인스턴스 내부에 행을 저장하는 방법이 필요합니다. 따라서 요소로 여러 유형을 보유 할 수있는 정렬 된 컬렉션 (특수 List와 같은)이 필요하며 런타임에 유형 만 결정될 수 있어야합니다. 어떻게해야합니까? 벡터 또는 목록에서는 모든 요소가 동일한 유형으로되어 있어야합니다. Tuple은 다른 유형을 가질 수 있습니다 (잘못 입력하지 않으면 런타임에 확인할 수 있음). 그러나 최대 22 개의 요소는 너무 적습니다.

보너스 (나는 너무 많은 지금 요구하고 있는지 확실하지 않습니다) : 나는 또한 행 '열을하고 싶은

  • 는 이름과 이름으로 초과-수있다. 그러나이 문제는 두 목록을 사용하여 쉽게 해결할 수 있다고 생각합니다. (어쨌든, 나는이 어딘가에 대해서이 글을 읽었다. 그러나 나는 어디에서 잊어 버렸고, 이것이 더 우아하게 해결되었다고 생각한다.)
  • "List"보다는 "Vector"가 임의로 접근하도록하는 것이 좋을지도 모른다.).
  • 선형 대수 (행렬 곱셈 등) 기능이 유용 할 것입니다.
  • 더 많은 보너스 : 행렬을 저장할 수 있다면.

내 질문의 올드 말씨 :

나는 우리가 스칼라 R에서 그것을 알고 같은 data.frame 같은 것을하고 싶은,하지만 난 단 하나 개의 행을 필요로하기 위하여려고하고있다 . 이 행은 클래스의 멤버가 될 것입니다. 이 구조의 이유는 각 행과 관련된 메서드를 데이터 자체에 가까이 있기를 원하기 때문입니다. 각 데이터 행은 또한 자체에 대한 메타 데이터가 있어야하고 다른 행이 다르게 조작되도록 함수를 제공 할 수 있습니다. 그러나 어떻게 든 클래스 내에서 행을 저장해야합니다. 목록이나 벡터가 마음에 듭니다. 그러나 모든 정수, 문자열 등만 허용됩니다. 그러나 data.frame에서 알 수 있듯이 다른 열 (벡터 또는 목록의 요소)은 다른 유형일 수 있습니다. 또한 열 이름별로 행 값에 액세스 할 수 있도록 각 열의 이름을 저장하려고합니다. 그것은 가장 작은 문제로 생각됩니다. 내가 의미하는 바가 분명하기를 바랍니다. 어떻게 구현할 수 있습니까?R에서

+0

예를 들려 줄 수 있습니까? 나는 정말로 당신이하려고하는 것을 모른다. – wheaties

+0

@ wheaties : 내 질문에 대한 답. 희망이 도움이됩니다. – Make42

+0

"유형이 런타임에만 결정됩니다"는 의미는 무엇입니까? 유형은 컴파일 시간 유효성 검증을 위해 존재합니다. 그것이 유용하지 않기 때문에 런타임에 타입 정보를 얻는 것은 의미가 없습니다. 두 번 그렇게 지우니까. – HTNW

답변

0

DataFrames 균질 열 벡터의 이종 목록이다 :

> df <- data.frame(c1=c(r1=1,r2=2), c2=c('a', 'b')); df 
    c1 c2 
r1 1 a 
r2 2 b 

수 스칼라 값의 불균일에서 각 행의 생각해 스칼라

> as.list(df['r1',]) 
$c1 
[1] 1 

$c2 
[1] a 

것과 유사한 구현 리스트의 튜플이됩니다 :

scala> val df = (List(1, 2), List('a', 'b')) 
df: (List[Int], List[Char]) = (List(1, 2),List(a, b)) 
scala> val r1 = (1, 'a') 
r1: (Int, Char) = (1,a) 

당신이 모든 변수의 이름을 원하는 경우는, 또 다른 가능성은 경우 클래스입니다 :

scala> case class Row (col1:Int, col2:Char) 
defined class Row 

scala> val r1 = Row(col1=1, col2='a') 
r1: Row = Row(1,a) 

희망 스칼라 분할에 R를 해소하는 데 도움이 23,414,각 행은 단지 튜플 수 있습니다.

+0

아주 가깝습니다. Tuple을 런타임에 임의의 유형으로 채울 수 있습니까? 튜플은 최대 22 개의 값만 가질 수 있습니다 ... 문제입니다. 나는 내 질문에 대한 답을했다. 희망이 도움이됩니다. – Make42

관련 문제