0
나는 (겉으로보기에는 단순한)이 문제에 대한 답을 찾기 위해 높고 낮음을 찾았지만 아무 것도 나에게 도움을 주거나 나를 가리켜 주길 빈다. 올바른 방향으로tibble의 각 요소에 "복잡한"사용자 정의 함수를 적용하는 방법
데이터 세트에 적용하려는 상당히 복잡한 서브 모델을 사용하지만, 단지 mutate를 사용하면 Variables must be length 1 or 21.
오류가 발생하여 영향을 미치지 않습니다.
myData <- tibble(x=10:20, y=c("a", "b","a", "b","a", "b","a", "b","a", "b","a"))
staticData <- tibble(x=0:100, y=c("a"),f=x/100) %>% union (tibble(x=0:100, y=c("b"),f=x/1000))
ComplicatedFunction <- function(mystaticData, myx, myy) {
#make the base table
myBaseTable <- tibble(
y = myy,
x = c(myx:(myx + 20))
)
#add f rates
myBaseTable <- left_join(myBaseTable,mystaticData)
#add stuff
myBaseTable <- myBaseTable %>%
mutate(z = 1 - (f * 0.8)) %>%
mutate(zCumulative = cumprod(z))
#Calculate the thing
myCalculatedThing <- sum(myBaseTable$zCumulative)
return(myCalculatedThing)
}
#This is what I want to do
myData %>% mutate(newcol = ComplicatedFunction(mystaticData = staticData,
myx = x,
myy = y))
#this works
ComplicatedFunction(mystaticData = staticData,
myx = 19,
myy = "b")
ComplicatedFunction(mystaticData = staticData,
myx = 20,
myy = "a")
#This works (but would be silly as I want the function to be evaluated for each line)
myData %>% mutate(newcol = ComplicatedFunction(mystaticData = staticData,
myx = 15,
myy = "a"))
#This no longer works, but I dont understand what I am doing wrong
myData %>% mutate(newcol = ComplicatedFunction(mystaticData = staticData,
myx = x,
myy = "a"))
#I tried rowwise(), but this doesnt seem to work either
myData %>% rowwise() %>% mutate(newcol = ComplicatedFunction(mystaticData = staticData,
myx = x,
myy = y))
누군가가 내가 잘못 여기서 뭐하는 거지 나에게 설명 할 수 있기를 바랍니다.
미리 감사드립니다.
실뱅
많은 감사 @Student합니다. 문제를 해결합니다. 내가 왜 그것이 (도움을 확인한 후)하지만 부분을 추가하는 데 필요한 이해가 안 돼요. 문제가 너무 많지 않은 경우, 왜 이것이 작동하는지 설명하는 문서를 알려줄 수 있습니까? – Sylvain
'df %> % mutate'는'CompleicatedFunction'이 벡터화 된 함수가 아니기 때문에 작동하지 않았습니다. 이것은 왜 당신이'rowwise'를 사용하길 원하는지에 대한 것입니다. 'partial'을 사용하여 제안한 이유는'staticData'가 고정되어 있고 행별로 처리해서는 안되기 때문입니다. 그래서 partial은 staticData가 이미 채워져 있고 새로운 함수는 두 개의 "동적 인"변수'x'와'y' 만 가지고있는 새로운 함수를 만들었습니다. (이제 코드를 다시 실행하면 코드의 마지막 줄이 작동하므로 문제가 사라졌고 그 이유에 대해서는 잘 모르겠습니다.) – student