0
다음은 샘플 data.table
입니다.spread()를 사용하면 data.table이 복사됩니까?
set.seed(123)
mydt <- data.table(id = 1:100, x = sample(LETTERS[1:6], size = 100, replace = TRUE), group = paste0("group", sample(1:3, size = 100, replace = TRUE)), prob = runif(100, 0, 1))
나는
mydt2 <- mydt %>% spread(group, prob)
그럼 내가 이렇게하면
mydt2[!is.na(group1), new.col := x]
, 나는 다음과 같은 경고 얻을에로 새 열을 정의 할 다양한 형식으로 긴에서 갈 tydir::spread
를 사용
Warning message:
In `[.data.table`(mydt2, !is.na(group1), `:=`(myscale, x)) :
Invalid .internal.selfref detected and fixed by taking a (shallow) copy
대신 이걸 실행하면
mydt2 <- copy(mydt %>% spread(group, prob))
mydt2[!is.na(group1), myscale := x]
경고 메시지가 표시되지 않습니다. 나는이 행동을 이해하지 못한다. 누구든지 도움을 제공 할 수 있습니까? 이 문제를 해결하기 위해 copy()
올바른 방법을 사용하고 있습니까?
제목은 매우 유익한되지 않을 수도 파이프로 연결된 전화에
setDT()
를 추가하는 것입니다. 그렇다면 – simone'tidyr :: spread'가 내부 구조를 망가 뜨리면'data.table'이 수정되므로 (경고); 'copy' 과정에서 생성 된 새로운'data.table'은 자동적으로 정확한 내부 구조를 가지고 있습니다. 여기서 내부 구조는 열 iirc에 대해 사전 할당 된 메모리를 나타냅니다. – eddi
나는이 행동에 놀랐다. 나는'gather()'가'data.table '을 돌려 준다고 생각하지 않는다. 경고를 피하기 위해'copy()'를 사용해야합니까? – simone