0
python dict와 같은 목록을 사용하려고합니다. 함수를 실행할 때마다 추가 할 수 있습니다. 궁극적으로이 기능을 데이터 프레임의 모든 행에 적용하려고합니다. 나는 일부 데이터를 통해 별도로 실행할 때데이터 프레임의 행을 반복하는 함수를 사용하여 목록에 요소 추가
foo <- vector(mode="list", length=2)
names(foo) <- c("Larry", "Bob")
myfun <- function(name, round, foo){
foo[[name]] <<- c(foo[[name]], round)
}
이 작동 : 좀 장난감 데이터에 그것을 밖으로 시도하고
myfun("Larry", "R2", foo)
myfun("Larry", "R2", foo)
myfun("Bob", "R1", foo)
myfun("Larry", "R1", foo)
foo
$Larry
[1] "R2" "R2" "R1"
$Bob
[1] "R1"
하지만 데이터 프레임을 통해 작업 할 수있는 기능을 얻을 수 없다 :
datf <- data.frame(name = c("Larry", "Larry", "Bob", "Larry"),
round = c("R2", "R2", "R2", "R1"))
mapply(myfun, name=datf$name, round=datf$round, foo=foo)
이 (내가 왜 모르겠어요?) 콘솔에서 다음을 생성합니다
[1] 1 1 2 3
및 푸에 다음
내 다른 생각은 for 루프에서 myfun()를 적용하려고했다foo
$Larry
[1] 2
$Bob
[1] 3
:
for(row in 1:nrow(datf)){
myfun(datf$name, datf$round, foo)
}
그러나 이것은 오류 발생 :
Error in foo[[name]] : no such index at level 2
을
모든 통찰력은 인정 될 것입니다!
대신에 간단한 'split()'을 사용하면됩니다 :'with (datf, split 라운드, 이름))'. 언어 간을 이동할 때 단순히 함수 호출을 변환하려고 시도하는 대신 다른 관용구를 배우는 것이 유용합니다. 일반적으로 R의 적절한 함수는 [부작용] (https://en.wikipedia.org/wiki/Side_effect_ (computer_science))이 없어야하므로 함수에서'<< -'를 피하십시오. – MrFlick