Description Usage Arguments Details Value Author(s) Examples
slider
and gslider
construct a Tcl/Tk-widget with sliders and buttons to
demonstrate the effects of variation of parameters on calculations and plots.
1 2 3 4 5 6 7 8 | slider(sl.functions, sl.names, sl.mins, sl.maxs, sl.deltas, sl.defaults, but.functions,
but.names, no, set.no.value, obj.name, obj.value, reset.function, title, prompt=FALSE,
sliders.frame.vertical=TRUE)
gslider(sl.functions, sl.names, sl.mins, sl.maxs, sl.deltas, sl.defaults, but.functions,
but.names, no, set.no.value, obj.name, obj.value, reset.function, title, prompt=FALSE,
sliders.frame.vertical=TRUE, hscale=1, vscale=1,
pos.of.panel = c("bottom","top","left","right")[1])
|
sl.functions |
set of functions or function connected to the slider(s) |
sl.names |
labels of the sliders |
sl.mins |
minimum values of the sliders' ranges |
sl.maxs |
maximum values of the sliders' ranges |
sl.deltas |
change of step per click |
sl.defaults |
default values for the sliders |
but.functions |
function or list of functions that are assigned to the button(s) |
but.names |
labels of the buttons |
no |
|
set.no.value |
|
obj.name |
|
obj.value |
|
reset.function |
function that induce a |
title |
title of the control window |
prompt |
if TRUE slider functions are called by moving a slider, if FALSE slider functions are called after releasing the mouse button |
sliders.frame.vertical |
if TRUE the sliders are stacked one above the other; otherwise they are positioned side by side |
hscale |
horizontal scale factor for image size; compare tkrplot in package tkrplot |
vscale |
vertical scale factor for image size; compare tkrplot in package tkrplot |
pos.of.panel |
position of the panel field for sliders and buttons.
Value of |
slider
constructs a separated panel for controlling the parameters whereas
gslider
integrates a graphical device and buttons and sliders within one window.
The following actions can be done:
a) definition of (multiple) sliders and buttons,
b) request or specification of slider values, and
c) request or specification of variables in the environment slider.env
.
The management takes place in the environment slider.env
. If slider.env
is not found it is generated.
Definition ... of sliders: First of all you have to define sliders, buttons and the attributes of them.
Sliders are established by six arguments:
sl.functions, sl.names, sl.minima, sl.maxima,sl.deltas
, and sl.defaults
.
The first argument,
sl.functions
, is either a list of functions or a single function that
contains the commands for the sliders.
If there are three sliders and slider 2 is moved with the mouse the function stored in
sl.functions[[2]]
(or in case of one function for all sliders the function sl.functions
)
is called.
DEFINITION ... of buttons: Buttons are defined by a vector of labels but.names
and a list of functions:
but.functions
. If button i
is pressed the function stored in but.functions[[i]]
is called.
REQUESTING ... a slider:
slider(no=1)
returns the actual value of slider 1,
slider(no=2)
returns the value of slider 2, etc.
You are allowed to include expressions of the type
slider(no=i)
in functions describing the effect of
sliders or buttons.
SETTING ... a slider: slider(set.no.value=c(2,333))
sets slider 2
to value 333.
slider(set.no.value=c(i,value))
can be included in the functions
defining the effects of moving sliders or pushing buttons.
VARIABLES ... of the environment slider.env
: Sometimes information
has to be trransferred back and forth between functions defining the effects of sliders and buttons.
Imagine for example two sliders: one to control p
and another one to control q
,
but they should satisfy: p+q=1
. Consequently, you have to correct the value of the first slider
after the second one was moved. To prevent the creation of global
variables store them in the environment slider.env
.
Use slider(obj.name="p.save",obj.value=1-slider(no=2))
to assign value 1-slider(no=2)
to the variable p.save
.
slider(obj.name=p.save)
returns the value of variable p.save
.
Dependencies The function gslider
depends on package tkrplot
.
Using slider
in definition mode slider
returns the value of new created the top level widget.
slider(no=i)
returns the actual value of slider i
.
slider(obj.name=name)
returns the value of variable name
in environment slider.env
.
gslider
return in definition mode the result of tkrplot
which was called to construct the widget.
Hans Peter Wolf
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 | # example 1, sliders only
if(interactive()){
## This example cannot be run by examples() but should work in an interactive R session
plot.sample.norm<-function(){
refresh.code<-function(...){
mu<-slider(no=1); sd<-slider(no=2); n<-slider(no=3)
x<-rnorm(n,mu,sd)
plot(x)
}
slider(refresh.code,sl.names=c("value of mu","value of sd","n number of observations"),
sl.mins=c(-10,.01,5),sl.maxs=c(+10,50,100),sl.deltas=c(.01,.01,1),sl.defaults=c(0,1,20))
}
plot.sample.norm()
}
# example 2, sliders and buttons
if(interactive()){
## This example cannot be run by examples() but should work in an interactive R session
plot.sample.norm.2<-function(){
refresh.code<-function(...){
mu<-slider(no=1); sd<-slider(no=2); n<-slider(no=3)
type= slider(obj.name="type")
x<-rnorm(n,mu,sd)
plot(seq(x),x,ylim=c(-20,20),type=type)
}
slider(obj.name="type",obj.value="l")
slider(refresh.code,sl.names=c("value of mu","value of sd","n number of observations"),
sl.mins=c(-10,.01,5),sl.maxs=c(10,10,100),sl.deltas=c(.01,.01,1),sl.defaults=c(0,1,20),
but.functions=list(
function(...){slider(obj.name="type",obj.value="l");refresh.code()},
function(...){slider(obj.name="type",obj.value="p");refresh.code()},
function(...){slider(obj.name="type",obj.value="b");refresh.code()}
),
but.names=c("lines","points","both"))
}
plot.sample.norm.2()
}
# example 2a, sliders and buttons and graphics in one window
if(interactive()){
## This example cannot be run by examples() but should work in an interactive R session
plot.sample.norm.2<-function(){
refresh.code<-function(...){
mu<-slider(no=1); sd<-slider(no=2); n<-slider(no=3)
type= slider(obj.name="type")
x<-rnorm(n,mu,sd)
plot(seq(x),x,ylim=c(-20,20),type=type)
}
slider(obj.name="type",obj.value="l")
gslider(refresh.code,sl.names=c("value of mu","value of sd","n number of observations"),
sl.mins=c(-10,.01,5),sl.maxs=c(10,10,100),sl.deltas=c(.01,.01,1),sl.defaults=c(0,1,20),
but.functions=list(
function(...){slider(obj.name="type",obj.value="l");refresh.code()},
function(...){slider(obj.name="type",obj.value="p");refresh.code()},
function(...){slider(obj.name="type",obj.value="b");refresh.code()}
),
but.names=c("lines","points","both"))
}
plot.sample.norm.2()
}
# example 3, dependent sliders
if(interactive()){
## This example cannot be run by examples() but should work in an interactive R session
print.of.p.and.q<-function(){
refresh.code<-function(...){
p.old<-slider(obj.name="p.old")
p<-slider(no=1); if(abs(p-p.old)>0.001) {slider(set.no.value=c(2,1-p))}
q<-slider(no=2); if(abs(q-(1-p))>0.001) {slider(set.no.value=c(1,1-q))}
slider(obj.name="p.old",obj.value=p)
cat("p=",p,"q=",1-p,"\n")
}
slider(refresh.code,sl.names=c("value of p","value of q"),
sl.mins=c(0,0),sl.maxs=c(1,1),sl.deltas=c(.01,.01),sl.defaults=c(.2,.8))
slider(obj.name="p.old",obj.value=slider(no=1))
}
print.of.p.and.q()
}
# example 4, rotating a surface
if(interactive()){
## This example cannot be run by examples() but should work in an interactive R session
R.veil.in.the.wind<-function(){
# Mark Hempelmann / Peter Wolf
par(bg="blue4", col="white", col.main="white",
col.sub="white", font.sub=2, fg="white") # set colors and fonts
refresh.code<-function(...){
samp <- function(N,D) N*(1/4+D)/(1/4+D*N)
z<-outer(seq(1, 800, by=10), seq(.0025, 0.2, .0025)^2/1.96^2, samp) # create 3d matrix
h<-100
z[10:70,20:25]<-z[10:70,20:25]+h; z[65:70,26:45]<-z[65:70,26:45]+h
z[64:45,43:48]<-z[64:45,43:48]+h; z[44:39,26:45]<-z[44:39,26:45]+h
x<-26:59; y<-11:38; zz<-outer(x,y,"+"); zz<-zz*(65<zz)*(zz<73)
cz<-10+col(zz)[zz>0];rz<-25+row(zz)[zz>0]; z[cbind(cz,rz)]<-z[cbind(cz,rz)]+h
theta<-slider(no=1); phi<-slider(no=2)
persp(x=seq(1,800,by=10),y=seq(.0025,0.2,.0025),z=z,theta=theta,phi=phi,
scale=T, shade=.9, box=F, ltheta = 45,
lphi = 45, col="aquamarine", border="NA",ticktype="detailed")
}
slider(refresh.code, c("theta", "phi"), c(0, 0),c(360, 360),c(.2, .2),c(85, 270) )
}
R.veil.in.the.wind()
}
|
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.