【发布时间】:2022-01-15 15:18:15
【问题描述】:
我想在一个数据框中使用多对变量绘制许多图,所有变量都具有相同的 x。我将图存储在命名列表中。为简单起见,下面是一个示例,每个图中只有 1 个变量。
这个函数的关键是一个select() 调用,这里显然不是必需的,但我的实际数据。
函数的主体在每个变量上都可以正常工作,但是当我遍历一个变量列表时,列表中的最后一个总是产生
get(ll) 中的错误:找不到对象“d”。
(或任何最后一个变量,如果不是 'd')。将data <- df %>% select(x,ll) 替换为data <- df 可以避免该错误。
## make data
df2 <- data.frame(x = 1:10,
a = 1:10,
b = 2:11,
c = 101:110,
d = 10*(1:10))
## make function
testfun <- function(df = df2, vars = letters[1:4]){
## initialize list to store plots
plotlist <- list()
for (ll in vars){
## subset data
data <- df %>% select(x, ll) ## comment out select() to get working function
# print(data) ## uncomment to check that dataframe subset works correctly
## plot variable vs. x
p <- ggplot(data,
aes(x = x, y = get(ll))) +
geom_point() +
ylab(ll)
## add plot to named list
plotlist[[ll]] <- p
# print(p) ## uncomment to see that each plot is being made
}
return(plotlist) ## unnecessary, being explicit for troubleshooting
}
## use function
pl <- testfun(df2)
## error ?
pl
我有一个解决方法,通过在我的实际数据框中重命名变量来避免select(),但我很好奇为什么这不起作用?有什么想法吗?
【问题讨论】:
-
使用
dplyr::select?没有运行代码,只是认为它调用了错误的select。另一个问题可能是没有使用NSE。 -
我仍然使用
dplyr::select得到错误(一个合理的建议,因为 plotly 也有一个选择功能),但是@NelsonGon 的下面的建议有效