如何使 reshape2::acast 在变量聚合时抛出错误?
How to make reshape2::acast throw an error upon variable aggregation?
> DF = data.frame(expand.grid(LETTERS[1:3], LETTERS[4:5])[-3,], value=1:5)
> DFa = rbind(DF, c("A","D",6))
> DF
Var1 Var2 value
1 A D 1
2 B D 2
4 A E 3
5 B E 4
6 C E 5
> DFa
Var1 Var2 value
1 A D 1
2 B D 2
4 A E 3
5 B E 4
6 C E 5
61 A D 6
以下按预期工作:
> reshape2::acast(DF, Var1~Var2, value.var="value")
D E
A 1 3
B 2 4
C NA 5
对于执行聚合的情况,我更希望函数调用抛出错误而不是只写一条消息:
> reshape2::acast(DFa, Var1~Var2, value.var="value")
Aggregation function missing: defaulting to length
D E
A 2 1
B 1 1
C 0 1
如何包装第二次调用以抛出错误而不是显示消息?
我已经尝试了 capture.output()
和 sink()
的一些组合,但我希望在我的结果变量中包含调用的结果。
消息是 R 中 condition system 的一部分,可以使用适当的函数进行处理。因此,这有效:
withCallingHandlers(reshape2::acast(DF, Var1~Var2, value.var="value"),
message = stop)
顺便说一下,这是强烈喜欢使用 warning
和 message
而不是 cat
的原因。
> DF = data.frame(expand.grid(LETTERS[1:3], LETTERS[4:5])[-3,], value=1:5)
> DFa = rbind(DF, c("A","D",6))
> DF
Var1 Var2 value
1 A D 1
2 B D 2
4 A E 3
5 B E 4
6 C E 5
> DFa
Var1 Var2 value
1 A D 1
2 B D 2
4 A E 3
5 B E 4
6 C E 5
61 A D 6
以下按预期工作:
> reshape2::acast(DF, Var1~Var2, value.var="value")
D E
A 1 3
B 2 4
C NA 5
对于执行聚合的情况,我更希望函数调用抛出错误而不是只写一条消息:
> reshape2::acast(DFa, Var1~Var2, value.var="value")
Aggregation function missing: defaulting to length
D E
A 2 1
B 1 1
C 0 1
如何包装第二次调用以抛出错误而不是显示消息?
我已经尝试了 capture.output()
和 sink()
的一些组合,但我希望在我的结果变量中包含调用的结果。
消息是 R 中 condition system 的一部分,可以使用适当的函数进行处理。因此,这有效:
withCallingHandlers(reshape2::acast(DF, Var1~Var2, value.var="value"),
message = stop)
顺便说一下,这是强烈喜欢使用 warning
和 message
而不是 cat
的原因。