나는 여기에서 상당한 양의 읽기를 수행했으며 일반적으로 formula objects
을 문자열로 조작하지 않아야한다는 것을 알았지 만 나는 그렇지 않습니다. 매우 안전한 방법으로이 작업을 수행하는 방법을 발견 추가 할 수식과 물건이 모두 인수 인 적절한 수식 추가
tf <- function(formula = NULL, data = NULL, groups = NULL, ...) {
# Arguments are unquoted and in the typical form for lm etc
# Do some plotting with lattice using formula & groups (works, not shown)
# Append 'groups' to 'formula':
# Change y ~ x as passed in argument 'formula' to
# y ~ x * gr where gr is the argument 'groups' with
# scoping so it will be understood by aov
new_formula <- y ~ x * gr
# Now do some anova (could do if formula were right)
model <- aov(formula = new_formula, data = data)
# And print the aov table on the plot (can do)
print(summary(model)) # this will do for testing
}
아마도 내가 온 가장 가까운
reformulate
을 사용했지만 그것은 단지 RHS에
+
하지
*
제공합니다.
p <- tf(carat ~ color, groups = clarity, data = diamonds)
및 캐럿 ~ 색상 * 명확성을 위해 AOV 결과를 가지고 :이 같은 기능을 사용하고 싶습니다. 미리 감사드립니다. 여기에 솔루션
는 무슨 일이 일어나고 있는지 보여줍니다 아론의 코멘트 @ 기반으로 작동 버전 :
tf <- function(formula = NULL, data = NULL, groups = NULL, ...) {
print(deparse(substitute(groups)))
f <- paste(".~.*", deparse(substitute(groups)))
new_formula <- update.formula(formula, f)
print(new_formula)
model <- aov(formula = new_formula, data = data)
print(summary(model))
}
감사 :
또한 내가
xyplot
와 함께 사용하기 위해 비슷한 제안이 하나의 자매 질문이 대답을 참조하십시오. 수식'함수 안에! 호출의 격자 부분에 대해서는 그룹 인수에 데이터 프레임에서 무언가의 인용되지 않은 이름이 있어야하므로 'dat $ clarity'를 사용할 수 없으므로 인수로 '선명도'를 사용해야합니다. . 따라서'lm' 또는'aov' 호출은 그룹을 추가 한 후에 같은 방식으로 작동해야합니다. –문자열을 업데이트하려고 시도합니다 (주석으로 인해 형식이 잘못되었습니다 ... 죄송합니다 ...) : tf <- function (formula, group, d) { f <- paste (". ~. *", deparse 그룹))); lm (update.formula (formula, f), data = d) } – Aaron
@Aaron : 답변으로 게시해야합니다. –