使用Rstudio中的包操作,我正在尝试创建一个散点图,我可以使用选择器在几个数据框中进行选择,然后使用滑块控制我想为每个轴绘制的列.例如,使用这两个数据集:mtcars和iris.
library(manipulate)
manipulate(
plot(dataset[, xaxis] ~ dataset[, yaxis],
dataset,
xlab = colnames(dataset)[xaxis],
ylab = colnames(dataset)[yaxis],
main = title),
xaxis = slider(1, 10),
yaxis = slider(1, 10),
dataset = picker("mtcars" = mtcars, "iris" = iris),
title = picker("mtcars", "iris")
)
它工作正常,但是,我正在努力解决两个问题:
>如何根据所选数据集(mtcars或iris)动态更改绘图的标题,而不是像上面的示例中那样手动使用其他选取器.我无法获取所选数据框的名称并将其作为字符标题传递.
>如何动态确定滑块的最大参数,而不是滑块中从1到10的硬编码.例如,mtcars有11列和虹膜5.或者更好的是,按名称选择每个轴的列.我尝试了很多不同的方法,但我认为问题在于我无法将控件(数据集)中使用的变量传递给其他人(滑块).例如,这会生成错误:
xaxis = slider(1,as.numeric(dim(dataset)[2]))
最佳答案 在阅读了由Mark P. J. Van der Loo学习RStudio for R Statistical Computing中的一个例子后,我采取了不同的方法.我写了一个解决我问题的函数:
library(manipulate)
scatterplot <- function(dataset){
vars <- as.list(names(dataset))
name <- sys.call()[[2]]
manipulate(
plot(dataset[, xaxis] ~ dataset[, yaxis],
xlab = colnames(dataset)[xaxis],
ylab = colnames(dataset)[yaxis],
main = as.character(name)),
xaxis = slider(1, as.numeric(dim(dataset)[2]), initial = 1),
yaxis = slider(1, as.numeric(dim(dataset)[2]), initial = 2)
)
}
scatterplot(mtcars)