我无法在使用 mapply
时使用 xtabs
或 aggregate
的 subset
参数(或我测试过的任何函数,包括 ftable
和 lm
)。以下调用在使用 subset
参数时失败,但不使用该参数时可以正常工作:
mapply(FUN = xtabs,
formula = list(~ wool,
~ wool + tension),
subset = list(breaks < 15,
breaks < 20),
MoreArgs = list(data = warpbreaks))
# Error in mapply(FUN = xtabs, formula = list(~wool, ~wool + tension), subset = list(breaks < :
# object 'breaks' not found
#
# expected result 1/2:
# wool
# A B
# 2 2
#
# expected result 2/2:
# tension
# wool L M H
# A 0 4 3
# B 2 2 5
mapply(FUN = aggregate,
formula = list(breaks ~ wool,
breaks ~ wool + tension),
subset = list(breaks < 15,
breaks < 20),
MoreArgs = list(data = warpbreaks,
FUN = length))
# Error in mapply(FUN = aggregate, formula = list(breaks ~ wool, breaks ~ :
# object 'breaks' not found
#
# expected result 1/2:
# wool breaks
# 1 A 2
# 2 B 2
#
# expected result 2/2:
# wool tension breaks
# 1 B L 2
# 2 A M 4
# 3 B M 2
# 4 A H 3
# 5 B H 5
错误似乎是由于
subset
参数在错误的环境中未被评估。我知道可以使用 data = warpbreaks[warpbreaks$breaks < 20, ]
这个方法来在 data
参数中进行子集操作,但我正在努力提高我的R语言技能。我的问题是:
- 如何在
mapply
中使用subset
参数?我尝试使用match.call
和eval.parent
,但目前没有成功(更多细节请参见我的以前的问题)。 - 为什么在
data = warpbreaks
中评估了formula
参数,但没有评估subset
参数呢?
mapply
,也适用于例如lapply
:(i) 这个可以运行:lapply(X = list(warpbreaks, warpbreaks), FUN = xtabs, formula = ~ wool)
;但是 (ii) 这个会失败:lapply(X = list(warpbreaks, warpbreaks), FUN = xtabs, formula = ~ wool, subset = breaks < 15)
。 - Thomas