2012-12-13 2 views
2

테스트 셀당 하나의 레코드 (AB 테스트 결과)를 나타내는 작은 data.table을 가지고 있으며 각 테스트 셀을 비교하는 다른 여러 테스트 셀과 비교하는 여러 개의 열을 추가하려고합니다. 즉, 추가하려는 열의 수는 문제의 AB 테스트에있는 테스트 셀의 수에 따라 달라집니다.do.call을 사용하여 data.table 명령을 빌드하고 실행하십시오.

data.table은 다음과 같습니다

Group Delta  SD.diff 
Control  0   0 
Cell1 0.00200 0.001096139 
Cell2 0.00196 0.001095797 
Cell3 0.00210 0.001096992 
Cell4 0.00160 0.001092716 

그리고 (숫자가 여기에 쓰레기입니다) 다음과 같은 열을 추가 할 : 나는 확신

Group v.Cell1 v.Cell2 v.Cell3 v.Cell4 
Control 0.45  0.41  0.45  0.41 
Cell1 0.50  0.58  0.48  0.66 
Cell2 0.58  0.50  0.58  0.48 
Cell3 0.48  0.58  0.50  0.70 
Cell4 0.66  0.48  0.70  0.50 

do.call가 갈 수있는 방법이라고하지만, 스크립트를 생성하기 위해 do.call을 다른 스크립트 안에 삽입하는 방법을 알지 못한다. 그리고 나는 스크립트를 실행하는 방법을 배울 수 없다. (총 20 줄). 내가 현재하고있는 가장 가까운입니다 만 그 자체에 대해 하나 개의 테스트 셀 결과에 .. 0.50 결과 (확률에 의한 차이)를 비교

test.1.results <- mutate(test.1.results, P.Better.Cell2 = pnorm(Delta, test.1.results['Cell2'][,Delta], SD.diff,lower.tail=TRUE)) 

:

a <- do.call("paste",c("test.1.results <- mutate(test.1.results, P.Better.",list(unlist(test.1.results[,Group]))," = pnorm(Delta, test.1.results['",list(unlist(test.1.results[,Group])),"'][,Delta], SD.diff,lower.tail=TRUE))", sep="")) 

추천 스크립트 라인을 생산하고있다. 서로 비교할 때마다 각 테스트가 필요한만큼 사용하지 마십시오.

어디로 갈지 잘 모르겠습니다.

+0

data.table 패키지를 사용하면 왜 'mutate'를 사용하고 있습니까? 이것은 data.table의 힘을 사용하지 않습니다. – mnel

+0

나는 data.table을 배워야하지만,이 시나리오에서는 이상적이지는 않지만 대부분의 데이터 프레임처럼 작동합니다. 신뢰할 수있는 데이터 프레임으로 돌아 가야한다면 –

+0

@AndrewDempsey 그 맥락에서 신뢰할 수있는 형용사를 포함하면 나를 도와주고 동기를 부여 할 가능성이 낮습니다. –

답변

3

업데이트 : v1.8.11에서 FR #2077이 구현되었습니다. 이제 set()이 참조로 열을 추가 할 수 있습니다. NEWS에서이 같은

set() is able to add new columns by reference now. For example, set(DT, i=3:5, j="bla", 5L) is equivalent to DT[3:5, bla := 5L] . This was FR #2077 . Tests added.


작업 set() 종종 쉽다. 시연하려면 다음 질문에 대한 번역이 필요합니다. 그러나 나는 당신이 게시 한 것과는 다른 무엇인가를 원한다는 것을 알고 있습니다.

for (i in paste0("Cell",1:4)) 
    set(DT,     # the data.table to update/add column by reference 
    i=NULL,     # no row subset, NULL is default anyway 
    j=paste("P.Better.",i), # column name or position. must be name when adding 
    value = pnorm(DT$Delta, DT[i][,Delta], DT$SD.diff, lower.tail=TRUE) 

새 열의 하위 집합 만 추가 할 수 있으며 나머지는 NA로 채워집니다. :=set 모두

+0

을 개조했을 수도 있습니다.이 오류를 해결하기에 충분하지만 오류가 있습니다. set()을 사용하여 열을 추가 할 수 없으며 대신 =을 사용하여 참조로 열을 추가합니다. –

+0

실제로 절반 정도이므로 data.frames로 전환합니다. 내가해야 할 일을 통해이 반을 재 작업하고 다음 반을 재빨리 빨리 처리해야합니다. –

+0

매우 유망 해 보입니다. 나는 오류없이 실행할 수 없었다 : dput (DT) 구조체 (list (그룹 = 구조체 c (5L, 1L, 2L, 3L, 4L), 레이블 = c ("Cell1", "Cell2" Delta = c (0, 0.002, 0.00196, 0.0021, 0.0016), SD.diff = c (0, 0.001096139, 0.001095797, 0.001096992 , 0.001092716)), row.names = c (NA, -5L), 클래스 = c ("data.table", " data.frame ") .internal.selfref = <포인터 : 0x10d87b0>) –

관련 문제