我在包中使用melt.data.frame
中的reshape2
。由于我无法控制的原因,我已经让用户加载我的包(导入reshape2
)...然后加载reshape
包,导致我的包中出现未来错误(官方警告......和我的代码输出不正确)。
我见过这个讨论: Reshape package masking preventing melt from naming columns
所以我知道我可以使用reshape2:::melt.data.frame
来防止冲突,但这会在检查时生成一个我宁愿避免的注释。 gather
中的tidyr
函数也无法解决问题。这是一个可重复的例子:
library(reshape2)
df <- data.frame(x=rep("a",4),
y=c(1:3,NA),
key=c("g","g","c","d"),
stringsAsFactors = FALSE)
melt(df,id.vars = "key")
library(reshape)
melt(df,id.vars = "key")
reshape2::melt(df,id.vars = "key")
reshape2:::melt.data.frame(df,id.vars = "key") #No problem
reshape2::melt(df, measure.vars = c("x","y"),
variable.name = "variable",
value.name = "value", na.rm = FALSE)
library(tidyr)
gather(df, variable, value, -key)
gather_(df, "variable", "value", c("x","y"))