ࡱ> \ gbjbj >hbhbh h 80<lb((>>>3 ?HaJaJaJaJaJaJa$dfnaiGGGna>>aSSSG>>HaSGHaSSV`V>AE=,V4aa0b4V,sgSsg`V`VsgpV GGSGGGGGnanaSGGGbGGGGsgGGGGGGGGGh B : R Self-tutorial, an Introduction to R Programming Developed for graduate seminars at LSU (BIOL 7901) Fall 2009 - R for Ecologists Spring 2013 - Introduction to R Instructor: Kyle E. Harms Tel. 225-578-7566 e-mail kharms@lsu.edu This document contains a 4-session, self-tutorial introduction to R, the free software environment for statistical computing and graphics that developed out of S and S-plus (see the R Project website: http://www.r-project.org). R is a useful programming environment for many applications in ecology, evolutionary biology, and myriad other fields. By the end of these sessions my hope is that you will be able to: (1) read data from a file into an R session; (2) write data from an R session to a file; (3) create your own R functions; and (4) use R packages. To learn the basics of R programming, type each command as it is shown below into an R session and think about the output. I encourage you to make modifications to the commands that you type into your R session and to think about how the changes you make to the commands change the output. If you are willing and self-motivated to explore R, especially by trial-and-error, soon you will be comfortably using R. In the notes below, each command appears in: Arial 10-point font. Each command appears after a command prompt, i.e., the greater than symbol that appears on your computer screen in an R session: >; you do not need to type this when you type an R command. Remember to press the Enter key after each command. R output appears in: Courier 11-point font. Acknowledgements I owe a debt of gratitude to Rick Condit, whom I wish to thank for teaching me the rudiments of R programming in 2001. I also wish to thank the members of my research group at LSU and the participants on the various Center for Tropical Forest Science working groups for subsequent inspiration and information concerning R. A few useful references (from an ever-expanding list) Bolker, Benjamin M. 2008. Ecological Models and Data in R. Princeton U. Press, Princeton, NJ. Braun, John W. & Duncan J. Murdoch. 2008. A First Course in Statistical Programming with R. Cambridge U. Press, Cambridge, U.K. Clark, James S. 2007. Models for Ecological Data: An Introdution. Princeton U. Press, Princeton, NJ. Clark, James S. 2007. Statistical Computation for Environmental Sciences in R: Lab Manual for Models for Ecological Data. Princeton U. Press, Princeton, NJ. Crawley, Michael J. 2002. Statistical Computing: An Introduction to Data Analysis using S-Plus. John Wiley & Sons, West Sussex, U.K. Crawley, Michael J. 2005. Statistics: An Introduction using R. John Wiley & Sons, West Sussex, U.K. Crawley, Michael J. 2007. The R Book. John Wiley & Sons, U.K. [This is the one I most highly recommend] Dalgaard, Peter. 2002. Introductory Statistics with R. Springer, New York, NY. Kangas, Mike. 2004. R: a computational and graphics resource for ecologists. Frontiers in Ecology and the Environment 2:277. [A one-page endorsement of R] Krause, Andreas & Melvin Olson. 2000. The Basics of S and S-Plus, 2nd Ed. Springer-Verlag, Berlin, Germany. Maindonald, John & John Braun. 2007. Data Analysis and Graphics Using R. Cambridge University Press, Cambridge, U.K. Murrell, Paul. 2006. R Graphics. Chapman & Hall, Boca Raton, FL. R Development Core Team. 2009. R: A Language and Environment for Statistical Computing. R Foundation for Statistical Computing, Vienna, Austria. ISBN 3-900051-07-0, URL http://www.R-project.org. [This is the recommended citation that R provides; within an R session, simply type the command citation(), and the recommended citation format will appear] Stevens, M. H. H. (Forthcoming) A Primer of Theoretical Population Ecology with R. Use R! Series, Springer. Venables, W. N., D. M. Smith and the R Development Core Team. 2001. An Introduction to R. Network Theory Limited, Bristol, U.K. Installing R onto your computer (PC) You should download and run the executable file that will install R onto to your own computer. To do so, use the following instructions (current as of July 2009): - Go to the R Project website (www.R-project.org) - Click the CRAN (Comprehensive R Archive Network) link along the left-hand side of the R Project web page under the sub-heading Download, Packages - Click a link to select a mirror site from which to download the executable installation program - Select the appropriate operating system for your computer from within the Precompiled Binary Distributions box For non-Windows operating systems, download the appropriate file or files For Windows 95 and later, continue as follows: - Select base - Select and download the executable file that will install the current version of R (as of July 19, 2009 the current version is R-2.9.1). - Run the executable file that you just downloaded to your desktop and follow the instructions as they appear on your screen An R icon should appear on your desktop To open an R session, click (or double click) the R icon on your desktop Installing R onto your computer (Mac) Follow the instructions in the YouTube video How to Install R for Mac and Use a Few Basic Functions http://www.youtube.com/watch?v=ICGkG7Gg6j0 Note re PC vs. Mac I wrote the following notes from the perspective of a PC-user, so some of the details concerning paths-to-files, etc. may need modification on a Mac. SESSION 1 Some basics > x=1 = is the assignment operator; in some R references you will see <- used, but this is no longer being supported by the ever-evolving R > x [1] 1 [1] indicates the position (see below), whereas 1 indicates the value of x > num.of.trees=739 x and num.of.trees are atomic variables > num.of.trees [1] 739 > a=b=2.76 Multiple assignment > a You do not need to type a and Enter, but I did so here to [1] 2.76 show that a now equals 2.76 > b You do not need to type b and Enter, but I did so here to [1] 2.76 show that b now also equals 2.76 > ls() The functions ls() & objects() list all objects [1] "a" "b" "num.of.trees" "x" (variables and functions) created during the current R session; round parentheses () contain any arguments used by the function in this case none, so the function uses its default conditions You have now created 4 objects in your current R session and you have used one R function; since you did not create the canned function ls(), it does not appear in your list of objects. > x=1:50 Re-assigns the object x to be a vector > x [1] 1 2 3 4 5 6 7 8 The number in brackets is the index, i.e., the [9] 9 10 11 12 13 14 15 16 position of the associated element of the vector, and there are 50 elements, each with its own [49] 49 50 index in this vector > x[25] Calls up the 25th element of x, since square brackets [] refer to indices > x[1:20] Calls up the first 20 elements of x > length(x) Function length() counts the number of elements in x; note that x is an argument to the function length() > mean(x) Function mean() calculates the mean of the elements in x > range(x) Etc > var(x) > summary(x) > std_dev=sqrt(var(x)) Here we have a function within a function > z=51:100 > x/z Vector division > y=c(1,2,3,4,5,6,7,8,9,10) Function c() combines atomic elements > y2=c("BIOL","7083","Community","Ecology") > mean(c(2,4,6)) Function within a function > seq1=seq(0,200,by=50) Function seq() creates a sequence of numbers > p1=(seq1^2)[3] Returns p1 as the square of the third element of the vector seq1 > p2=(seq1^2)[-3] Returns p2 as the square of all but the third element of the vector seq1 > q=seq1[seq1>100] Returns q as the elements of seq1 > 100 Two ways of declaring a variable that will later be filled with numeric info.: > samp=0 > samp1=numeric() Matrices > xmat=matrix(1:25,nrow=5) Function matrix() creates a matrix > xmat [,1] [,2] [,3] [,4] [,5] [1,] 1 6 11 16 21 [2,] 2 7 12 17 22 [3,] 3 8 13 18 23 [4,] 4 9 14 19 24 [5,] 5 10 15 20 25 > dim(xmat) Function dim() provides the dimensions of a matrix; dim() is the 2D analog of length() > xmat^3 [,1] [,2] [,3] [,4] [,5] [1,] 1 216 1331 4096 9261 [2,] 8 343 1728 4913 10648 [3,] 27 512 2197 5832 12167 [4,] 64 729 2744 6859 13824 [5,] 125 1000 3375 8000 15625 > xmat[1,2] Subset = intersection of first row and second column [1] 6 > xmat[2,] Subset = intersection of second row and all columns [1] 2 7 12 17 22 > xmat[1:2,2:3] Subset = intersection of first two rows and second plus third columns [,1] [,2] [1,] 6 11 [2,] 7 12 > xmat[,4] Subset = intersection of all rows and fourth column [1] 16 17 18 19 20 > xmat[,-4] Subset = intersection of all rows and all columns but the fourth [,1] [,2] [,3] [,4] [1,] 1 6 11 21 [2,] 2 7 12 22 [3,] 3 8 13 23 [4,] 4 9 14 24 [5,] 5 10 15 25 > xmat[,c(1,3)] Subset = intersection of all rows and first plus third columns [,1] [,2] [1,] 1 11 [2,] 2 12 [3,] 3 13 [4,] 4 14 [5,] 5 15 > image(xmat) Function image() produces an image of a matrix > zmat=xmat*2 > zmat [,1] [,2] [,3] [,4] [,5] [1,] 2 12 22 32 42 [2,] 4 14 24 34 44 [3,] 6 16 26 36 46 [4,] 8 18 28 38 48 [5,] 10 20 30 40 50 > xmat/zmat Divide elements of one matrix by those of another [,1] [,2] [,3] [,4] [,5] [1,] 0.5 0.5 0.5 0.5 0.5 [2,] 0.5 0.5 0.5 0.5 0.5 [3,] 0.5 0.5 0.5 0.5 0.5 [4,] 0.5 0.5 0.5 0.5 0.5 [5,] 0.5 0.5 0.5 0.5 0.5 > z=matrix(1:10) Assigns 1 through 10 as elements of a matrix of 10 rows by 1 column > image(z) Provides a view of the matrix as an image of colors > z=matrix(5,10,10) Assigns fives as elements of a matrix of 10 rows by 10 columns > image(z) Provides a view of the matrix as an image of colors in this case monochromatic since only a single value appears in the matrix (5) > z=matrix(1:5,10,10) > image(z) > z[2,7]=3 Assigns a new value to 1 element of the matrix > image(z) Notice the orientation of the image > image(t(z)) Function t() transposes the elements of the matrix; notice the orientation of the image > z=matrix(1:3,5,5) Think about why you get a warning message in this case > image(z) > graphics.off() Use the graphics.off() function to clear graphics from an R session screen Reading data from files A sample data set is available to you via a link on the course web site, at the following URL: http://www.biology.lsu.edu/webfac/kharms/gigtree.txt Save the file (gigtree.txt) to your computers C: drive before proceeding. > help(read.table) Function help() displays a help file for a function > tree.data=read.table("c:/gigtree.txt", header=T) Function read.table() reads the contents of a data set and creates a data frame from those contents. A data frame is essentially a matrix containing a combination of numeric variables and character strings. Use either / or \\ in the path to the file. The argument header=T is used for a data set containing labeled columns (a header). > tree.data[1:10,] Displays the first 10 rows of the data set > dim(tree.data) Provides the dimensions of the data frame Manipulating data sets Subsetting > tree.data.dbh=tree.data$DBH Subset 1 selected colmun ( DBH values (given in mm in this data set) > length(tree.data.dbh) > tree.data.dbh[1:10] > tree.data.dbh2=tree.data[,5] Subset 1 column ( column 5 only, i.e., DBH values > length(tree.data.dbh2) > tree.data.dbh2[1:10] > tree.gr1000=tree.data[tree.data$DBH>=1000,] Subset selected rows ( individuals ( 1000 mm DBH > dim(tree.gr1000) > tree.gr1000 > tree.data.2=tree.data[,c(2,5)] Subset 2 colmuns > tree.data.2[1:3,] Species DBH 1 MALOGU 222 2 DIPTPA 1240 3 VATAER 935 > tree.data.3=tree.data[,c("Species","DBH")] Subset 2 colmuns > tree.data.3[1:3,] Species DBH 1 MALOGU 222 2 DIPTPA 1240 3 VATAER 935 > tree.data.4=data.frame(tree.data$Species, tree.data$DBH) Subset 2 colmuns > tree.data.4[1:3,] tree.data.Species tree.data.DBH 1 MALOGU 222 2 DIPTPA 1240 3 VATAER 935 So, it is possible to subset multiple columns on the column numbers (as in tree.data.2) or on the column names (as in tree.data.3), or to create a dataframe using the data.frame() function and listing the two columns to include (as in tree.data.4). Sorting > tree.gr1000.rank=rank(tree.gr1000$DBH) Function rank() returns the list of ranks for > tree.gr1000.rank each position of the current vector to place [1] 35.0 37.0 27.0 50.0 8.0 etc the elements in ascending order > tree.gr1000.order=order(tree.gr1000$DBH) Function order() returns the list of positions > tree.gr1000.order of elements from the current vector that [1] 37 50 49 29 6 etc would arrange them in ascending order > tree.gr1000.order.neg=order(-tree.gr1000$DBH) Function order() returns the list of positions > tree.gr1000.order.neg of elements from the current vector that [1] 46 48 55 30 59 etc would arrange them in descending order (due to the - in the argument) > tree.gr1000[tree.gr1000.order,] Returns data arranged by ascending DBH Tag Species GX GY DBH FertPlot 2838 3406 VATAER 247.3 540.2 1000 0 10564 12206 VATAER 444.4 163.7 1003 0 10385 12024 BUCHCA 405.1 94.8 1007 0 2434 2908 PRI2CO 208.0 332.1 1010 0 568 810 PRI2CO 107.0 405.3 1014 18 etc > tree.gr1000[tree.gr1000.order.neg,] Returns data arranged by descending DBH Tag Species GX GY DBH FertPlot 3764 4575 VATAER 402.6 584.6 1741 29 7016 8242 VATAER 467.2 639.8 1609 33 11201 12859 DIPTPA 386.4 205.8 1604 0 2451 2927 DIPTPA 230.4 312.0 1538 0 11940 13617 TERMAM 180.1 750.1 1519 0 etc Writing data to files > help(write.table) Function write.table() is useful for creating text files > write.table(tree.gr1000, file="c:/tree.dbhgr1000.txt", quote=F, row.names=F, sep="\t") Further information & suggestions Arguments: Type a function name without parentheses to see its code typed out on screen. To make the function work, type it with the appropriate arguments inside the parentheses. Some functions have entirely optional arguments, while others require at least one or some specific arguments. Command line: Use the arrow keys to move through commands previously used; the up arrow key will allow you to scroll through the most recent commands you have used. Use the Home key to go to the beginning of a command. Use the Esc to quit writing a command mid-way through. Digits: The number of digits that R displays can be changed. > options(digits) To determine the current number of digits in an R session > options(digits=10) To set the current number of digits in an R session to 10 Note that it is advisable not to exceed 22 digits. For example, you might encounter the following output from the following commands: > options("digits") $digits [1] 7 > 0.987654321*2 [1] 1.975309 > options(digits=15) > 0.987654321*2 [1] 1.975308642 File menu: Save History To save all the commands used in a given R session. The file should be named with file extension .Rhistory. Load History To retrieve a saved R sessions commands. Save Workspace To save the objects created during an R session. The file should be named with file extension .RData. Load Workspace To retrieve the objects saved during an R session. Functions & Help: To examine the syntax and use of any given function: > help(function.name) Calls up a help page for any specific function or > ?function.name Calls up a help page for any specific function Within a help window for a given function, the default arguments for the function are given under Usage. Graphics off: To remove a graphics window (which is especially useful when using lots of graphics, because R seems to crash if too many graphics windows are opened at once): > graphics.off() Help: To view help pages (R Help documentation) on particular functions, type: > help(function.name) e.g., > help(mean) or > ?function.name e.g., > ?mean Choose the Contents or Index tabs in an R Help window to show all functions in the R base package. Objects: Functions ls() & objects() will tell you which objects are currently active in your R session. Function rm() will remove an object (i.e., the one provided as an argument inside the parentheses) from your R session. The following command will remove all objects from your R session: > rm(list=ls()) Reading data from a file with blanks or missing values: The practice data set that accompanies these notes (gigtree.txt) contains no blanks or missing values, whereas other data sets might have some. R makes use of NA to indicate a blank or missing value, so before reading in a data set with blanks or missing values, replace each blank or missing value with NA (not including the quotes). Note that for many R functions to work properly with a data set with missing values, the argument na.rm=T must be included, e.g.: > mean(x, na.rm=T) Round parentheses & square brackets: Round parentheses, ( and ), contain the arguments of a function; they are also used to indicate precedence within mathematical expressions, e.g., (x+2)/7. Square brackets, [ and ], contain position information for subsets of an object. Quit an R session: > quit() or > q() SESSION 2 If you ended your R Session 1 above before getting to this point, read in the sample file (sample data set) we used during Session 1: > tree.data=read.table("c:/gigtree.txt", header=T) or, if you saved it as an R Workspace File from Session 1, load the workspace file, e.g., TreeData.RData. Basic graphics (Which will also help you visualize the sample data set) > plot(tree.data$GX, tree.data$GY) Function plot() creates a scatterplot of all stems Try plotting different size-classes, e.g.: > plot(tree.data$GX[tree.data$DBH>=200], tree.data$GY[tree.data$DBH>=200]) > plot(tree.data$GX[tree.data$DBH>=10 & tree.data$DBH<100], tree.data$GY[tree.data$DBH>=10 & tree.data$DBH<100]) Notice from the plots that the trees larger than 200 mm DBH were mapped in the entire plot, whereas smaller stems were mapped in 36 sub-plots. > hist(tree.data$DBH) Function hist() creates a histogram > hist(tree.data$DBH[tree.data$DBH>200]) for stems ( 20-cm DBH Graphics, such as the images created with the functions hist(), image(), and plot(), can be saved directly from the graphics window in a variety of formats, including Windows Metafile, Jpeg, etc. > maxdbh=max(tree.data$DBH) > b=c(seq(200,500,by=50),seq(600,maxdbh+100,by=100)) > hist(tree.data$DBH[tree.data$DBH>=200], breaks=b, col="red") Writing R functions > sq=function(x) return(x*x) A one-line function can be written on the command line > sq Returns the R code of the newly written function sq() > sq(10) Calls the function with the argument x = 10, where x [1] 100 is internal to the function. Since the x in the function sq() is internal to the function, even if you had previously assigned a value to x outside the function in the R session, it would not be used as a default value for x inside the function, e.g., > x=2 > sq() Note that sq() will not work without an explicit argument for its internal x > sq(x) Even so, x as defined outside the function can be used as the argument the [1] 4 function requires, which causes the x from outside the function to be used inside the function > mult=function(x,y,z) return(x*y*z) Another one-line function, mult() > mult(5,6,70) [1] 2100 > mult(2.76, 3.14, 7.89) [1] 68.3779 > mult2=function(x, y, z) return(c(x*x,y+z)) and another, mult2() > mult2(1,2,3) [1] 1 5 > mult2(z=3, y=2, x=1) Default positions of variables within the arguments can be [1] 1 5 overridden > mult3=function(x,y,z=3) return(c(x*x,y+z)) In function mult3() the default for z = 3 > mult3(1,2) [1] 1 5 It is generally recommended that functions requiring more than one line of code (i.e., the vast majority of functions) are written in a text editor, such as Notepad or Wordpad. The following example repeats our previous function, but now written in a text editor and given a new name, mult4(). Create the following function in a file named My_functions.txt (or My_functions.r). You might wish to keep your own R functions in a sub-dir named R_functions. In this case, the path to your file would be: c:/R_functions/My_functions.txt. # My first function The pound sign (#) signifies a comment; the text that mult4=function(x,y,z=3) appears on the same line after the pound sign is { ignored by the function return(c(x*x,y+z)) } > source("c:/R_functions/My_functions.txt") The function source() activates the > mult4 functions in My_functions.txt; type function(x,y,z=3) the name of a function to see its code { return(c(x*x,y+z)) } > mult4(1, 2) [1] 1 5 Manipulating data sets In the following example, you will generate a species list from the sample data set. > sp.list=unique(tree.data$Species) Function unique() provides a list of unique elements, which in this case are 6-letter codes that stand for species names > sp.list.sort=sort(sp.list) Function sort() provides a sorted species list > length(sp.list) Provides the species richness of the data set What would be a one-line command to determine the species richness of all stems ( 20-cm DBH within the sample data set (gigtree.txt)? Try this on your own, but one solution is given at the end of this sessions notes. Counting the number of individuals per species in the sample data set > table(tree.data$Species) A short-cut method for counting the number of individuals per species, using the function table() Counting the number of individuals larger than 3 diameter limits for a given species Create the following function in your text file of functions (i.e., My_functions.txt): # count.trees() a function to count individuals in three size classes for one species count.trees=function(species, spp.data, dbhcutoff) { diam1=spp.data$DBH[spp.data$DBH>=dbhcutoff[1] & spp.data$Species==species] diam2=spp.data$DBH[spp.data$DBH>=dbhcutoff[2] & spp.data$Species==species] diam3=spp.data$DBH[spp.data$DBH>=dbhcutoff[3] & spp.data$Species==species] return(c(length(diam1), length(diam2), length(diam3))) } > source("c:/R_functions/My_functions.txt") > count.trees("TET2PA", tree.data, c(10,100,300)) Returns the number of stems of [1] 1031 478 211 TET2PA in the data set larger than 1-cm, 10-cm, and 30-cm, respectively Using a for loop Add the following function to the existing file, My_functions.txt: # count.alltrees() a function to count individuals in three size classes for all species count.alltrees=function(sp.list, spp.all.data, dbhcutoff) { no.spp=length(sp.list) countperspp=matrix(0, nrow=no.spp, ncol=3) for(i in 1:no.spp) { countperspp[i,]=count.trees(sp.list[i],spp.all.data,dbhcutoff) } colnames(countperspp)=c("N.small", "N.medium", "N.large") return(data.frame(sp.list, countperspp)) } Notice that we used two new functions: colnames() and data.frame(). > source("c:/R_functions/My_functions.txt") > count.alltrees(sp.list.sort, tree.data, c(10,100,300)) sp.list N.small N.medium N.large 1 ACACME 1 1 0 2 ALCHCO 2 1 0 3 ALCHLA 15 11 1 226 TET2PA 1031 478 211 Further information & suggestions A useful startup procedure once R has been opened: > setwd("c:/R_functions") Sets the working directory to the location of your functions Now you can source functions without providing the entire path, e.g.: > source("My_functions.txt") To check your current working directory: > getwd() Hint: One solution to the question What would be a one-line command to determine the species richness of all stems ( 20-cm DBH within the sample data set (gigtree.txt)? is: > length(unique(tree.data$Species[tree.data$DBH>=200])) SESSION 3 Calculating diversity indices Use the function count.alltrees() to count the number of stems ( 20-cm DBH of each species (the values in the DBH column of the sample data set are given in mm). For example: > tree.data=read.table("c:/gigtree.txt", header=T) Read in sample data set from Session 1 > source("c:/R_functions/My_functions.txt") Source functions from Session 2 > sp.list=unique(tree.data$Species) > sp.list.sort=sort(sp.list) > counts=count.alltrees(sp.list.sort, tree.data, c(10,100,200)) > count.all.gr20=counts[,4] Make sure the total number of stems included in count.all.gr20 is correct before proceeding. Hint: you could use yet another built-in R function, sum(). Calculating Shannon-Weaver (a.k.a. Shannon, Shannon-Weiner) Index The basic formula: H = -  pi * ln(pi) & where pi is the proportion of all individuals in the sample belonging to species i Create the following function and save it in a new functions file ( My_diversity_functions.txt ): # Shannon-Weaver Index calc.shan=function(sp.counts) { shan.index=0 N=sum(sp.counts) sp.counts.new=sp.counts[sp.counts>0] no.spp=length(sp.counts.new) for(i in 1:no.spp) { shan.index=shan.index+((sp.counts.new[i]/N)*log(sp.counts.new[i]/N)) } return((-1)*shan.index) } Call the function with the appropriate argument within parentheses, i.e., use the column output from count.alltrees() that contains the counts of individuals within species, since the function calc.shan() expects the input to be a vector of counts (one count for each species). > source("c:/R_functions/My_diversity_functions.txt") > calc.shan(count.all.gr20) Calculating Simpson s Index The basic formula: D = 1 -  pi2 & where pi is the proportion of all individuals in the sample belonging to species i Create the following function and save it in your diversity functions file: # Simpsons Index calc.simp=function(sp.counts) { simp.index=0 N=sum(sp.counts) no.spp=length(sp.counts) for(i in 1:no.spp) { simp.index=simp.index+((sp.counts[i]/N)*(sp.counts[i]/N)) } return(1-simp.index) } > source("c:/R_functions/My_diversity_functions.txt") > calc.simp(count.all.gr20) Rarefaction > x=1:10 > sample(x, 5) Look up the function sample() in the help pages > sample(x, 5, replace=F) Repeat the above command several times (remember that you can re-populate the command line with the most recent command you used by pressing the up arrow key) > sample(x, 5, replace=T) Repeat the above command several times > sample(x, 25, replace=T) Repeat the above command several times The functions length(), sample(), sort() & unique() together can provide useful re-sampling, boot-strapping, jack-knifing, and randomization procedures, including rarefaction. Here, for example, is a one-line set of commands that returns the number of species within a sample of x stems chosen at random from the entire data set: > x=25; len=length(tree.data$Species); length(unique(tree.data$Species[sample(1:len,x)])) Notice that two or more commands can be placed on the same line if they are separated by a semi-colon. Examine the output from the following command to help understand what sample(1:len,x) does: > sample(1:len,x) Note: Remember that you have already assigned len and x. What happens when you reassign these variables to new values? If you wanted to repeatedly choose samples of x individuals you could use a for loop, as below: > sampz=numeric(); for(i in 1:10) sampz[i]=length(unique(tree.data$Species[sample(1:len,x)])) Notice that you would now have sufficient data to calculate not only the mean number of species per random sample of x individuals, but also sufficient data to calculate a variance around the mean (or confidence interval, standard deviation, etc.), thereby allowing you to compare the mean with the mean of another appropriately rarefied data set. You could also use the function sample() to return the data for x individuals sampled at random from the entire data set: > samp.dat=tree.data[sample(1:len, x),] Note: Make sure len is equal to the total number of stems in the data set for the above command. Calculating Fishers Alpha The basic formula is: S =  * ln(1 + N/) We want to know the value of  that satisfies the above relationship, given the number of individuals in our sample (N), and the number of species in our sample (S). We must do this through an iterative procedure. Let s determine the value of Fisher s Alpha () from the Gigante data set ( gigtree.txt ), using stems ( 20-cm DBH. First, determine the total number of stems ( 20-cm DBH in the sample data set, and assign that value to N. Determine the total number of species included in the stems ( 20-cm DBH in the sample data set, and assign that value to S. Create the following function and save it in your diversity functions file: # Fishers alpha, calculated from counts of individuals and species # Note that this program assumes that the true value of alpha lies within the range # 0.001 10000 (a likely assumption for local assemblages of organisms) # The function returns -1 if there is a problem calc.alpha=function(n.orig, s.orig) { a=numeric() len.n=length(n.orig) len.s=length(s.orig) if(len.n != len.s) { return(-1) } for(i in 1:len.n) { if(n.orig[i]<=0 | s.orig[i]<=0 | n.orig[i]<=s.orig[i]) { a[i]=(-1) } else { low.a=0.001 high.a=10000 low.s = low.a*log(1+(n.orig[i]/low.a)) high.s = high.a*log(1+(n.orig[i]/high.a)) if((s.orig[i]<=low.s) | (s.orig[i]>=high.s)) { a[i]=(-1) } else { use.s=s.orig[i]+1 while(s.orig[i] != use.s) { use.a=(low.a+high.a)/2 use.s=use.a*log(1+(n.orig[i]/use.a)) if(s.orig[i]use.s) { low.a=use.a } } a[i]=use.a } } } return(a) } fisher The new function calc.alpha() uses a binary search technique to estimate Fishers alpha from pairs of values of individuals and species. Any number of pairs can be entered, as the vectors N (individuals) and S (species). > source("c:/R_functions/My_diversity_functions.txt") > calc.alpha(N,S) Remember that you should have previously set N and S equal to their appropriate values for the sample data set; see the instructions in the very first portion of this section (Calculating Fishers Alpha) Further information & suggestions Functions: Curly brackets, { and }, contain the commands within the text of a function. The pound sign, #, indicates a comment within a function. Objects: Remember that the functions objects() or ls() will tell you which objects are currently active in your R session, so if you have included all of the above diversity index functions in one file, then once that file is sourced, all the functions should be available as active objects. Sourcing multiple files that contain functions: Now that you have more than one file containing functions, you could source them using the following steps: 1. Create a file that contains source commands for all function files, e.g.: Place only these two lines in a new file, e.g., c:/R_functions/Functions_to_source.txt: source("c:/R_functions/My_functions.txt") source("c:/R_functions/My_diversity_functions.txt") 2. When you begin an R session, source the new file, e.g.: > source("e:/R_functions/Functions_to_source.txt") Now all the functions in the aforementioned files are sourced and ready to be used in the current R session. SESSION 4 Now that you are familiar with R and writing functions, I will assume that you can fill in the steps between the commands that I have written out in these notes... Creating species-area curves Species per any given sub-region of the plot Create the following function (in a file of your choice) to determine the numbers of individuals and species, using stems equal to or larger than any size cutoff, and from any rectangular subplot of the larger sample plot (make sure you know how the variables that are passed into the function as arguments are being used inside the function): # Counts of the total numbers of species (S) and individuals (N) in a given area spp.per.area=function(dataset, x1, x2, y1, y2, dbhmin) { no.ind=length(dataset$Species[dataset$GX>=x1 & dataset$GX=y1 & dataset$GY=dbhmin]) no.spp=length(unique(dataset$Species[dataset$GX>=x1 & dataset$GX=y1 & dataset$GY=dbhmin])) return(c(no.ind, no.spp)) } (Note that everything on the 2 lines after no.ind should be on 1 line in your function file; similarly, everything on the 2 lines after no.spp should be on 1 line your function file page formatting in this Word document caused these 2 lines of code to expand to 4 lines.) Source the above function and run it for a square sub-plot, e.g.: > spp.per.area(dataset=tree.data, x1=0, x2=100, y1=0, y2=100, dbhmin=200) Species per area in a randomly selected square of any size Run the following command to view 10 random uniform numbers: > runif(1) Function runif() returns uniform random numbers. With 1 as the main argument, function runif(1) returns one uniform random number within the default range of 0 to 1. Every time runif() is called, it returns a different random number (or numbers if more than 1 is requested). > runif(10) With 10 as the main argument, function runif(10) returns 10 uniform random numbers Create a function to determine the number of individuals and the number of species from a random square sub-plot, rather than pre-assigned sub-plots (notice that a minimum dbh cutoff and the overall plots dimensions are supplied for the sample data set as default values in the arguments to the function): # Counts of S and N in a randomly chosen area spp.per.rand.sq=function(dataset, sq.size, dbhmin=200, plotdim=c(480,800)) { if(sq.size>min(plotdim)) return("You can't use a square larger than the plot.") xlo=(plotdim[1]-sq.size)*runif(1) ylo=(plotdim[2]-sq.size)*runif(1) xhi=xlo+sq.size yhi=ylo+sq.size return(spp.per.area(dataset, x1=xlo, x2=xhi, y1=ylo, y2=yhi, dbhmin)) } Source and run, e.g.: > spp.per.rand.sq(tree.data, 100) Each time you run spp.per.rand.sq(), a new square sub-plot will be assessed. Mean and standard deviation of the total number of species and the total number of individuals for a square of a given size Create a function to calculate the mean numbers of total individuals and species per hectare for randomly generated sub-plots, along with their standard deviations; the argument replicates will be the number of times random hectares are selected, and species counted in each: # Mean and st. dev. for S and N throughout the plot mean.spp.per.sq=function(dataset, sq.size=100, dbhmin=200, plotdim=c(480,800), replicates=10) { spcount=matrix(ncol=4, nrow=replicates) for(i in 1:replicates) spcount[i,]=spp.per.rand.sq(dataset, sq.size, dbhmin, plotdim) return(c(mean(spcount[,1]), sd(spcount[,1]), mean(spcount[,2]), sd(spcount[,2]))) } Source and run, e.g.: > mean.spp.per.sq(tree.data) Be sure to notice that we are using functions to call other functions in the above exercises. Create a matrix of species-area information for varying areas Create the following function; note that area will be a vector listing a series of sub-plot dimensions, in meters; each sub-plot size will in turn be submitted to mean.spp.per.sq(): # Mean and st. dev. for S and N throughout the plot, at three spatial scales spp.area.sq=function(dataset, area, dbhmin=200, plotdim=c(480,800), replicates=10) { no.quadratsizes=length(area) m=matrix(nrow=length(area), ncol=5) sp.per.sq=data.frame(m) for(i in 1:length(area)) { hectares=area[i]*area[i]/10000 sp.per.sq[i,1]=hectares sp.per.sq[i,2:5]=mean.spp.per.sq(dataset, sq.size=area[i], dbhmin=dbhmin, plotdim=plotdim, replicates=replicates) } colnames(sp.per.sq)=c("area_(ha)", "mean.ind_(N)", "sd.ind_(N)", "mean.spp_(S)", "sd.spp_(S)") return(sp.per.sq) } > spp.area.sq(tree.data, area=c(20,50,100)) Calling the function spp.area.sq() for 3 sub-plot sizes Create a species area curve Generate mean counts of individuals and species for sub-plots of various sizes: > gig.spp.area=spp.area.sq(tree.data, area=c(10,20,30,40,50,60,70,80,90,100,200,300,400), replicates=15) > gig.spp.area area_(ha) mean.ind_(N) sd.ind_(N) mean.spp_(S) sd.spp_(S) 1 0.01 1.333333 0.8164966 1.333333 0.8164966 2 0.04 5.400000 2.3237900 4.333333 1.8387366 3 0.09 11.866667 4.0508670 9.866667 3.0674947 4 0.16 21.600000 7.1294159 14.666667 3.9036003 5 0.25 34.266667 5.1055525 21.866667 2.9244454 6 0.36 49.000000 8.1152414 27.200000 6.1202241 7 0.49 62.533333 7.4341554 31.000000 5.8309519 8 0.64 84.200000 9.1744988 39.066667 3.8631347 9 0.81 102.533333 8.1052599 38.933333 5.4963191 10 1.00 130.133333 9.5608328 43.333333 4.0824829 11 4.00 537.600000 19.6097643 86.933333 7.1360920 12 9.00 1176.400000 22.3632351 110.400000 2.9952343 13 16.00 2109.000000 26.1752337 125.666667 1.8771813 Note: Your output values will not exactly match the values above, since each time we call spp.per.rand.sq() we use a different sub-plot or set of sub-plots. Plot species area curves: > plot(gig.spp.area$area, gig.spp.area$mean.spp) > plot(log10(gig.spp.area$area), log10(gig.spp.area$mean.spp))  Use the linear model function lm() to estimate the slope of the species-area curve: > fit=lm(log10(gig.spp.area$mean.spp)~log10(gig.spp.area$area)) > fit Call: lm(formula = log10(gig.spp.area$mean.spp) ~ log10(gig.spp.area$area)) Coefficients: (Intercept) log10(gig.spp.area$area) 1.5795 0.5916 The Arrhenius species-area curve is given by: S = cAz or Log10(S) = Log10(c) + z * Log10(A) The output from the linear model above means that the species-area curve for our sample data set is: Log10(S) = 1.5795 + 0.5916 * Log10(A) or S = 37.9752 * A0.5916 Hint: Log10(c) = 1.5795, and solve for c using the following command: > 10^1.5795 Use the abline() function to add a line corresponding to the linear fit through the species-area curve: > abline(fit)  Appendix 1. Archive of multi-line functions created in this R Self-tutorial. The principle functions that we created during this 4-session introduction to R are provided below and could be copied from here, pasted into a single text file (e.g., My_functions.txt or My_functions.r), and saved. That text file could then be sourced to make these functions available within an R session: # count.trees() a function to count individuals in three size classes for one species count.trees=function(species, spp.data, dbhcutoff) { diam1=spp.data$DBH[spp.data$DBH>=dbhcutoff[1] & spp.data$Species==species] diam2=spp.data$DBH[spp.data$DBH>=dbhcutoff[2] & spp.data$Species==species] diam3=spp.data$DBH[spp.data$DBH>=dbhcutoff[3] & spp.data$Species==species] return(c(length(diam1), length(diam2), length(diam3))) } # count.alltrees() a function to count individuals in three size classes for all species count.alltrees=function(sp.list, spp.all.data, dbhcutoff) { no.spp=length(sp.list) countperspp=matrix(0, nrow=no.spp, ncol=3) for(i in 1:no.spp) { countperspp[i,]=count.trees(sp.list[i],spp.all.data,dbhcutoff) } colnames(countperspp)=c("N.small", "N.medium", "N.large") return(data.frame(sp.list, countperspp)) } # Shannon-Weaver Index calc.shan=function(sp.counts) { shan.index=0 N=sum(sp.counts) sp.counts.new=sp.counts[sp.counts>0] no.spp=length(sp.counts.new) for(i in 1:no.spp) { shan.index=shan.index+((sp.counts.new[i]/N)*log(sp.counts.new[i]/N)) } return((-1)*shan.index) } # Simpsons Index calc.simp=function(sp.counts) { simp.index=0 N=sum(sp.counts) no.spp=length(sp.counts) for(i in 1:no.spp) { simp.index=simp.index+((sp.counts[i]/N)*(sp.counts[i]/N)) } return(1-simp.index) } # Fishers alpha, calculated from counts of individuals and species # Note that this program assumes that the true value of alpha lies within the range # 0.001 10000 (a likely assumption for local assemblages of organisms) # The function returns -1 if there is a problem calc.alpha=function(n.orig, s.orig) { a=numeric() len.n=length(n.orig) len.s=length(s.orig) if(len.n != len.s) { return(-1) } for(i in 1:len.n) { if(n.orig[i]<=0 | s.orig[i]<=0 | n.orig[i]<=s.orig[i]) { a[i]=(-1) } else { low.a=0.001 high.a=10000 low.s = low.a*log(1+(n.orig[i]/low.a)) high.s = high.a*log(1+(n.orig[i]/high.a)) if((s.orig[i]<=low.s) | (s.orig[i]>=high.s)) { a[i]=(-1) } else { use.s=s.orig[i]+1 while(s.orig[i] != use.s) { use.a=(low.a+high.a)/2 use.s=use.a*log(1+(n.orig[i]/use.a)) if(s.orig[i]use.s) { low.a=use.a } } a[i]=use.a } } } return(a) } # Counts of the total numbers of species (S) and individuals (N) in a given area spp.per.area=function(dataset, x1, x2, y1, y2, dbhmin) { no.ind=length(dataset$Species[dataset$GX>=x1 & dataset$GX=y1 & dataset$GY=dbhmin]) no.spp=length(unique(dataset$Species[dataset$GX>=x1 & dataset$GX5CJ\aJhbg5CJ\aJh<5CJ\aJhHc5CJ\aJh6h}Z5\h6h}Z6] h6h}Z h6h6UY[cjl}~,4=E]u|/;<=mnpx|~   1MƿʸʴոʸʸʸոոƩʸʸʸΛ hQhr hQh!bh Z hQhhr(Y hQhho hQh<h<h] hQh|| hQhr hJ h]hJ h||\ hJ h|| hJ hr hJ heq==lm~ %&Tqr~h^hgd]fDgd]fD 0^`0gd<`gdr`gdM$%&BEfgnpqr»{qcUJC hQh<<hh<<CJ aJ hh<<5CJ \aJ hh5CJ \aJ h7h]fD5\h7h76\h7h7\h7h75\h7h75CJ\aJh75CJ\aJ hJ h]fDh]fD hQh]fDhQh]fD5CJ\aJh]fD5CJ\aJh5CJ\aJ hQht$ hQh+h+hrh<rwx~-5}veVJB:h@ hd'G6hd'Ghd'G6hd'GCJOJQJaJhd'Ghd'GCJOJQJaJ h0Ehd'GCJOJQJ^JaJ hh:l hr6O6]hhr6O6]hr6O6\]hh:l6\]hh6]hh:l6]hh6hr6O h0Eh:lCJOJQJ^JaJ hQh:lhQh:l5CJ\aJh>5CJ\aJhQhF5CJ\aJ~kl+T !!!! P^`Pgdd'GgdHcgd:lgd, @ ^@ `gdd'Ggdd'G @ ^@ `gdr6O5Aijkl{~ϾvgVE h0Eh:lCJOJQJ^JaJ h0EhJCJOJQJ^JaJhd'Gh:lCJOJQJaJhd'Ghd'GCJOJQJaJhQh,6] h6]hh,6]h6\]hh,6\]h hQh, h0Ehd'GCJOJQJ^JaJ h0Eh,CJOJQJ^JaJ hQhd'G hd'GhJhd'Ghd'Ghd'G6 h@ 6)+36TW[\tuǽ﨣y﨣hya hQhHc hHchHcCJOJQJ^JaJhHcCJOJQJaJhHchHcCJOJQJaJ hHchHchHchHc6 hHc6hHcCJOJQJ^JaJ h6]hQh:l6]h=h:l6]h=hHc6h hQh:lh0Eh:lCJaJ h0EhHcCJOJQJ^JaJ!      ! " # $ ʿʦrbrbrbXNhhd'G6]hd'Ghd'G6]hd'Ghd'GCJOJQJ]aJhd'GCJOJQJ]aJ hd'G6]hhJ6]hhJ6\]hh56\] h[/6]hh:l6]h[/6\]hh:l6\]hh6\]hNShd'Ghh[/CJOJQJ^JaJ h0Eh:lCJOJQJ^JaJ$ - 2 ; a @!X!s!!!!!!!!!!!!!!!!!!!!!!!ĽununnfZh`W|CJOJQJaJh@ 6\] hNS6]hQh\F6]hQh:l6]h@ hQh hQh:l h0Eh:lCJOJQJ^JaJ h0EhCJOJQJ^JaJ hQhd'Ghd'Ghd'G6] hn,6] h@ 6] h:56] hd'G6]hhd'G6]hhd'G6\]!!("v""""'#(#Z#[###$$1$2$=$>$M$N$$$$$$ @ ^@ `gd:5gd0Egd`gd ugd:l!!!!""#"'"("4"?"B"D"L"_"f"u"{"}"""""""""""""¸}±yrk}cYR h@ 6]hHch@ 6]hHchHc6 h@ h:l hHc6]h u h@ h`W|h@ h`CJOJQJaJh@ h:lCJOJQJaJh@ h`W|CJOJQJaJ h@ h`h@ hz#6]h@ h`6]h@ h`6\] hNS6]h`W|h`W|h`CJOJQJaJh`W|h:lCJOJQJaJ""""""""""&#'#(#1#2#3#4#I#Y#Z#[#f#g#p#x#|#########øã蜣ñÜynyyg` hNSh5 hNShOhNShO6\]hNShO6]h:5 h0EhOCJOJQJ^JaJhNS hNSh:l hNShb{ h:56] hNS6]hNSh:l6H*]hNSh:l6]hNShHc6] hNSh:lCJOJQJ^JaJ h0Eh:lCJOJQJ^JaJ hQhb{!###$$)$*$+$,$0$1$2$;$<$=$>$L$M$N$P$X$d$g$h$»ɦzf_NJFhoghr6O h0Ehr6OCJOJQJ^JaJ h0Eh&h0Eh6CJOJQJ]^JaJ h0EhCJOJQJ^JaJ h0Eh:l&h0Eh:l6CJOJQJ]^JaJ h0Eh5CJOJQJ^JaJhNS hNSh5 hNSh:l h0Eh:lCJOJQJ^JaJhNSh:l6] hNS6]hNSh56\]hNSh56]h$$$$$$$$$$$$$$$$$$$$$$$$$$%%%üë弤}sl[ h0EhACJOJQJ^JaJ hNS6]hNShS736]hNShS736\] h0EhS73CJOJQJ^JaJhNSh:l6\] hNShNS hNSh:lCJOJQJ^JaJ hNSh5 h0Eh:lCJOJQJ^JaJ h0Eh5CJOJQJ^JaJ hNSh:lhNSh:l6]hNShNS6]$$$$)%*%X%Y%%%%%Y&Z&&&&&&' ' '''S' h^h`gd:l h^h`gds p^p`gdNSgd:lgd:l%&%(%)%*%:%;%<%V%W%X%Y%`%p%q%z%%%%%%%%%%%%%%%޿ƓƤp_UUKhNShA6]hNShs6] hNSh:lCJOJQJ^JaJ h0EhACJOJQJ^JaJ hNS6]hNShS736\] h0EhsCJOJQJ^JaJhNShS736]hNSh:l6] hNShNS hNSh:l hNShS73 h0EhS73CJOJQJ^JaJ h0Eh:lCJOJQJ^JaJ h0Ehr6OCJOJQJ^JaJ%%%%%%%%%% & &&&&&&&&7&X&Y&Z&^&l&m&u&v&w&x&{&&&&&&&&&&&ͼͫͫ夂xmxhNShs6\]hQhs6] hQh7 hNSh:lCJOJQJ^JaJhNShA6] hNSh:l h0Eh:lCJOJQJ^JaJ h0EhACJOJQJ^JaJ h0EhCJOJQJ^JaJ hNShshNSh:l6]hNShs6] hNS6](&&&&&&&&&&&' ' '''''.'/'0'9'òësbQJ@h^uhM}6] hQhM} h^uhM}CJOJQJ^JaJ h^uh:lCJOJQJ^JaJ h^uhCJOJQJ^JaJ hQh:lhQh:l5CJ\aJhQhs5CJ\aJhs hQhs h0EhACJOJQJ^JaJ h0Eh:lCJOJQJ^JaJ h0EhsCJOJQJ^JaJ hNS6]hQhs6]hQhZ*6]9'A'L'R'S'Z'(((#(((-(L(Q(p(q(r(z(~((9):)E)G)~wf_NG hQhgE h-h:lCJOJQJ^JaJ hQh h^uhVCJOJQJ^JaJ hQhO h!96]hQh!96] h^u6]h^uhO6\]h^uhO6]h!9 h^uhOCJOJQJ^JaJh`W|h:lCJOJQJaJ h^uh:lCJOJQJ^JaJh^uh:l6]h^uhM}6]h^uhM}6\]S'Z'x'''''(q(r(((((()9):)|))))))/*>*M* p^p`gd!9 h^h`gd:lG){)|)))))))))))))).*/*\*]*g*i***************+++++++@,A,O,P,Y,`,b,v,w,~,Ȭȥh-h:l6]h-h+46\]h-h+46] h-h:l hQh:lh-hQh:l6] hQhgE h-h:lCJOJQJ^JaJ hQhh-h:lCJOJQJaJ h-6]hQhgE6]4M*\*]*****+1+J+c+|+++++,,",1,@,A,,,,,,,, h^h`gd:l~,,,,,,,J-K-V-X-p-v---?.@.P.Q.Y.e.w......ͷͩͷukdkdZLkE hSDhshsCJOJQJ^JaJhshs6] hs6]hQhs6]"hsCJOJQJ^JaJmHsH(h-hsCJOJQJ^JaJmHsHhdZ{hdZ{6 hdZ{6hdZ{CJOJQJ^JaJh-h:lCJOJQJaJ hQhV h-h:lCJOJQJ^JaJ h-hVCJOJQJ^JaJ hQh:lh-h:l6],,-,-J-K-----.!.?.@.....+/,///// p^p`gd vR p^p`gds h^h`gds h^h`gd:l.... /*/+/,/6/8/////////////00 0Ϳͪm[m[QJm@h%h%6] h%6]hQh%6]"h%CJOJQJ^JaJmHsH(h-h%CJOJQJ^JaJmHsHh:lmHsHh/ih:lmHsH(h-h:lCJOJQJ^JaJmHsH(h-hVCJOJQJ^JaJmHsH hQhV h P6]hQh:l6] hQh:l h-h:lCJOJQJ^JaJ h-hVCJOJQJ^JaJ// 0P0Q000111m1n1o111122l2m22gdbf9gdpb gdF h^h`gdSD h^h`gd;H p^p`gd% h^h`gd% h^h`gd:l 0*0,0Q0Y0[0]0_000000001111 1"1l1m1ujYKC;h PhSD6h Ph P6h PCJOJQJ^JaJ h-hSDCJOJQJ^JaJh/ih:lmHsH(h-h:lCJOJQJ^JaJmHsHh;Hhb)6] hx6]h;Hh;H6]h;H h;Hh;H h-h:lCJOJQJ^JaJ h-hVCJOJQJ^JaJ h%6]"h%CJOJQJ^JaJmHsH(h-h%CJOJQJ^JaJmHsHm1n1o1v1111111111111122!2*2:2;2C2O2Q2R2l2m2222|rrkZkPh!9hbf96] h!9hbf9CJOJQJ^JaJ hQhbf9hQhVF6]hQh6]hQhv6]hQhbf96] hQhn% hQhpb hF6] hT6]hQh16] h!96] hQh]hQh]5CJ\aJh>5CJ\aJhQhRa5CJ\aJh7; hSDhSD22222222222222333/393333333˺}shs^^S^sIsI?h!9he6]h!9hmE6]h!9hQ6\]h!9hQ6]h!9hO6\]h!9hO6]hQhO6] h!9hOCJOJQJ^JaJ h!9hmECJOJQJ^JaJ h!9h_!CJOJQJ^JaJ h!9h%xCJOJQJ^JaJ h!9h@MCJOJQJ^JaJ hQhbf9 h!96]h!9hbf96]h!9hbf96\]2222B4C444444444E5]5s5t55 h^h`gd4 h^h`gd@M ^`gd h^h`gdn%gdur p^p`gd\Fgd vR^gdOgdmEgdhW33344 44454@4A4B4C4N4U4V4`4|4}444444444444444ɸڏږ{wshZhZhQhn%5CJ\aJh>5CJ\aJh!9hOhQhUX6]hQh\F6] h#T6]hQhO6] hQhO h!9hOCJOJQJ^JaJ h!9h@MCJOJQJ^JaJ hQh vRh!9hmE6] h!96]h!9he6\]h!9he6]h!9hQ6] 4444444455 5555&525?5@5C5D5E5N5W5[5]5h5r5s5t5v55555Լxggg` hQhh haih4CJOJQJ^JaJhQhwvO6] h#T6] hR56] hAk6] jhh6] hB6] h6]hQh0 6] hQh0  haih@MCJOJQJ^JaJ haihh CJOJQJ^JaJhQhn%5\hQh45\ hQhn%!555555555555555555556 6 666666%6&6,6-666;6׹n]n]n]n]n]nV hB6] haih9CJOJQJ^JaJ haih{CJOJQJ^JaJ hQhh haih4CJOJQJ^JaJ haih@MCJOJQJ^JaJ haihh CJOJQJ^JaJhQhh 6] hai6] jhh6] h6]hQh0 6] hQh0  haih0 CJOJQJ^JaJ!5555W6j6x6y6u9v9~999`:a:::A;gd@ P^`Pgd9 P^`Pgdg\gd9 h^h`gdn%gd h^h`gd9 P^`PgdB h^h`gd4 h^h`gd@M;6<6I6J6V6W6]6a6l6p6w6x6y66666667,707@7U77˺|kaPIk?Ph oh o6] h ohQZ h ohQZCJOJQJ^JaJh oh6] h oh oCJOJQJ^JaJ h ohCJOJQJ^JaJ h ohQZCJOJQJ^JaJh{ hQh{ haih9CJOJQJ^JaJ haih{CJOJQJ^JaJhQhh 6] hai6] jhQh0 6]hQh0 6] jhh6]77777777y8z8888888 9 9J9K9s9t9u9v9}9~99999999}l[l[lT hQh" hxh9CJOJQJ^JaJ hxh"CJOJQJ^JaJ hQhn%hQhn%5\hQh45\haihQZh oh6 h o6h ohQZ6 h ohQZCJOJQJ^JaJh oh o6] h oh o h oh oCJOJQJ^JaJ h ohQZCJOJQJ^JaJ h ohQZ 999999999:;:>:?:@:_:a:c:g:{:::::::::пиᩗuuundYdOEhQhg\6]hxhg\6]hxh06\]hxh06] hQh0 hxh+CJOJQJ^JaJhxhxh"CJOJaJ"hxh"6CJOJQJ]aJhxh"CJOJQJaJ hQh" hxh9CJOJQJ^JaJ hxh"CJOJQJ^JaJhQh"6]hxh"6\]hxh"6]:::::::::;;;;;;,;-;@;B;D;H;U;Y;`;a;e;q;t;͹|xq``O`O`H hQh" hxh CJOJQJ^JaJ hxh"CJOJQJ^JaJ hQh+hxhxh@CJOJaJ"hxh@6CJOJQJ]aJhxh@CJOJQJaJhxh"CJOJQJaJhQh"6]hQh@6]hQhg\6] hQh@ hxh9CJOJQJ^JaJ hxh@CJOJQJ^JaJA;B;;;J<K<<<< =N=|====>.>\>>>>????gd'gdo P^`Pgdxgd9 P^`Pgd9gd+t;};;;;;;;;;;;;;;<<<<<(<7<8<I<J<K<пЮᑂpc\RRHRcA hQhohQhV6]hQh 6] hQh hxh"CJOJaJ"hxh"6CJOJQJ]aJhxh"CJOJQJaJhxh'CJOJQJaJ hx6] hQh" hxh'CJOJQJ^JaJ hxh9CJOJQJ^JaJ hxh"CJOJQJ^JaJhQh"6]hxh"6\]hxh"6]K<M<Q<Y<]<l<m<o<v<<<<<<<==@=D=n=r========ƼucVGhxh'CJOJQJaJhxh'CJOJaJ"hxh'6CJOJQJ]aJ hxh"CJOJQJ^JaJ&hxh'5CJOJQJ\^JaJ hxh'CJOJQJ^JaJhQh"6] hx6]hQh7N6] hQh7N hxh7NCJOJQJ^JaJ hxh9CJOJQJ^JaJ hxh"CJOJQJ^JaJ===========>!>$>.>N>R>|>>>>>>? ??ƿjRjRjRjRjRj.hxh'5CJOJQJ\^JaJmHsH(hxh'CJOJQJ^JaJmHsH&hxh'5CJOJQJ\^JaJ hxh'CJOJQJ^JaJhQh"6] hx6]hQh7N6] hQh7N hxh7NCJOJQJ^JaJ hxh9CJOJQJ^JaJ hxh"CJOJQJ^JaJ hQh'???????,?1?2?E?G?P?]?`???????̽}shsaWFF5 hxhsCJOJQJ^JaJ hxh55}CJOJQJ^JaJhQh96] hx6]hxh96\]hxh96] hQh9 hxh9CJOJQJ^JaJ hQhn%hQhn%5CJ\aJh>5CJ\aJh&h"hxh'CJOJQJaJhxh'CJOJaJ"hxh'6CJOJQJ]aJ(hxh"CJOJQJ^JaJmHsH?1?2???????@ @@'A(A)A9A:AA BBBCBDBNBgdg6 0^`0gd>(J^gdj_gdj_^gdgdgd@ gdhWgd9gdn%????????????@@ @@@@'A(A)A+A,A8A9A:AĶyoykdZPEhhj_CJaJhhn%5\hhj_5\ hQh=hhQh5\ hQhhhCJaJhh5\ h5\hj_h5CJ\aJh>5CJ\aJhQhn%5CJ\aJh75CJ\aJh[/h@ hQh@ hxh9CJOJQJ^JaJ hxh!GCJOJQJ^JaJ:ABALAVAAAABBBBCBDBLBMBNBOBBBBBBBBBBBC"C#CVCWCCCCCCCCCD!D"D繨瞗琞{{l{llh[/hg6CJOJQJaJ hg6hg6hg6hg66CJ ]aJ hg66] h[/6]hg6hg66] h[/hg6CJOJQJ^JaJhg6hg6CJ aJ hbhg65CJ\aJhQhg65\ hg65\h=hg6h>(JhQhn%5\ hQhn%)NBOBBBB"C#CVCWCCCCCCCCCCDD!D"D#D0D1DDp^pgdg6^gdg6 0^`0gdg6gdg6"D#D%D/D0D1D=DDDDDDDZE`EcErEEEEEEEEEF F FF8F9F:F򸭦rnd]dUhn%CJ aJ h[/6]hhn%6]h[/ h[/hCJOJQJ^JaJ#h[/hn%CJOJQJ\^JaJ h[/hn%CJOJQJ^JaJ hQh;GhhCJaJhh5\ hQhbhQhb5\hbhg65CJ\aJ hg65\hQhg65\ hb5\ h=5\DDDcEEEEEEE9F:F=F>FFFFFFFgd 0^`0gd ^`gdh- ^`gd^gdgdn% 0^`0gdb 0^`0gdg6:F=F>FAFNFOFPF_F~FFFFFFFFFFFGGGG˺yrd]L:L#h[/hCJOJQJ\^JaJ h[/hCJOJQJ^JaJ hQhhbh5CJ\aJ h5\ hQh=hn%h[/hn%\ h[/hn% hQhn%hM*hh-CJ aJ hh-6]hhh-6]hh- h[/hh-CJOJQJ^JaJhCJOJQJ\^JaJhh-CJOJQJ^JaJ hhCJ OJQJ^JaJ hh-hh-FFGGGGGH7H8H;HHNHPHUHWH^H_H`HbHHHHHHHHHHHHHHHHH1IԸԬ٬Ը뢗yuuh6 h[/h6h[/h6\h[/h\ h[/hhhCJaJhh5\hwhwCJ\aJhwhw6\#hwhwCJOJQJ\^JaJ hw\hwhw\hwhw5\ hw5\ h=5\ h5\.1I2IWIXI\IIIIIIJJJJ J J#JAJBJCJDJEJyJJ|KKKKKKKKKLѿwsisesZsVsVsih6hM*hM*CJ aJ hu7hM*hM*6]hM*hbhM*CJaJhbhM*5\ hQhM* h%A[5\ hM*5\ h5\ hw5\ho=t h[/h X h X\#hwh XCJOJQJ\^JaJh XCJOJQJ\^JaJhwh X\h Xhdhd6hdhah!JJJ JDJEJKKLL2L3L4L\L]LLLUMVMWMlM 0^`0gdbgdb ^`gdM*^gdM* 0^`0gdM*gdM*gdn% 0^`0gdLLLLLLLL2L3L4LZL[L\L]LcLpLrLsLxL{LLLLLLLLMMMMM-MRMTMü{tmcm_[h~hbhQh\6] hQh\ h6h\h6h6\h6hz\ h6hzhbhbCJaJhbhAl5\ hQhz hb5\ h=5\ hM*5\ h6hM*CJOJQJ^JaJhM*hM*CJ aJ hM*h6h66] h6] h66] hM*6]#TMUMVMWMYMZMjMlMmMoMuMwMxM|M}MMMMMMMMM˺xqfXJC?h, hQhn%hrQhn%5CJ \aJ hrQh5CJ \aJ h5CJ\aJ hQhjOh6hbCJ\aJ h6h~h6hbCJaJ#h6h~CJOJQJ\^JaJ#h6hn%CJOJQJ\^JaJ h6hn%CJOJQJ^JaJh;hAlCJaJhQhn%5\hQhDj.5\ hw5\h=hb hQhFlMmMwMxM|M}MMMMMNNKNLNNNNNOO[O\OOOgd`gdurgdrQgd$\gd; h^h`gdn%gdn%^gdbMMMMMMMMM N NNNN"NKNLNMNONTNtNNNNNNNNNNNNNNNNNNOOνsll hQhrhQhr5CJ\aJhQh`5CJ\aJh>5CJ\aJ hQhn%hQh$\6] hQh#l` hQh hrQ h,hrQCJOJQJ^JaJ h,h$\CJOJQJ^JaJh;h#Th, hQhC[2 hQh2_ hQh$\'OO OOOOO"O'O(O1O8OMOZO[O\OOOOOOOOOOOOOOOOOOOOOOOOOOOPPPP͸זזזזזזׅׅׅttt h,hRCJOJQJ^JaJ h,h.]CJOJQJ^JaJ h,h5CJOJQJ^JaJhQhR6] hQhRh,h.]6]h,h`6\]h,h`6] h,hrQCJOJQJ^JaJ h,h`CJOJQJ^JaJ hQh`-OO/PEPFPPPQVQWQRR8RmRRRRRRSYSSSgdM @ ^@ `gd& h^h`gd<gd<gd\>[gd$\gd``gd,gdrQPPPP P!P%P.P/P1P5P6P:PEPFPPPPPPPPPPPPPQQQQQ Q$Q)Q-Q.Qީީxn]]]] h,h5CJOJQJ^JaJhQh`6] h,6]h,h`6\]h,h`6] hQh hQhr hQh` h,h`CJOJQJ^JaJ hQh,h5h, hQh5h,CJOJQJ^JaJ h,hrQCJOJQJ^JaJ h,h.]CJOJQJ^JaJ$.Q2QQJQKQUQVQWQQQQQQRRRRRR-R.R2R8RmRxRyRRRRRraraPrPrPrP h uh\>[CJOJQJ^JaJ h uhCJOJQJ^JaJ h uhrQCJOJQJ^JaJ hQh<h\h\6h\hrQ hQhrQ hQh` hQhRhQh`6] h,6] jhQh6]hQh6] hQh h,h5CJOJQJ^JaJ h,hrQCJOJQJ^JaJRRRRRRRRRRRRRRSSSS#S=SKSRSSSڶxmcYOHO>OchQhM6] hQh&hQh&6]hQhR6]h\h&6]h\hR6\]h\hR6] hQh< h\h<CJOJQJ^JaJ h\h&CJOJQJ^JaJh(H5CJ\aJh<5CJ\aJh>5CJ\aJhQh.]5CJ\aJhQh<5CJ\aJ hQh\>[ h uh<CJOJQJ^JaJSSTSXSYSaScSSSSSSSTTTTTTTUUUUeUjUlU}UUẨᖑm^mNG h\6]h\h\CJOJQJ]aJh\CJOJQJ]^JaJ#h\h\CJOJQJ]^JaJh\h\]h\h\6] h\]h\h&]hQhM6]"h\hM6CJOJQJ]aJh\hMCJOJQJaJ hQh& h\h&CJOJQJ^JaJhQh&6]h\hM6\]h\hM6]SSTTTUUeUUUUV+V4VMVYVZVVVV W$W'WWWWWgdgdY 6gd\ h^h`gd<UUUUUUUUVVV+V4VLVMVYVZVbVmVnVpVqVVVVVV¸Дtm\\ЃmRGh hY 66\]h hY 66] h uh_OCJOJQJ^JaJ hQhY 6h uhY 6CJOJQJaJ h uhY 6CJOJQJ^JaJh uh<CJOJQJaJh h<6]h h 6\]h h 6] hQh" hQh h uh<CJOJQJ^JaJ h uh CJOJQJ^JaJh\h\] h\]VVVVVVVV WW#W$W'W/WSWUWVWWWcWhWjWoW}W~WWWWWWĺως~ti^tTtMT hi6]hih<6]hihj6\]hihq6\]hihq6]hi hQhq h uhqCJOJQJ^JaJ h uh<h uhY 66]h uhY 6CJOJQJaJhQhY 66]h u hQhY 6 hQh<h uh<CJOJQJaJ h uh<CJOJQJ^JaJhQh<6]WWXXYY ZTZsZZZZZ[b[[[[[[[[%\&\gdb^gd$\ 7$8$H$gd+gd0Fgd!( 7$8$H$^gd+gdhWgdWWW6X=XAXHXXXXXXXXXXYYYYYYYZYeYfYgYYYYYYYYYYY Z!Z#ZPZSZҸҸٴ|th0Fh0F6 hih+CJOJQJ^JaJh0FhF6hFCJOJQJ^JaJ hFhFCJOJQJ^JaJh+hihi\ hG\ hF\hihhW\ hihhW hih+ hQh[jhih[j\hih[j6] hih[j(SZTZWZ[ZrZZZZZZZZZZZZZZ[)[8[;[I[a[d[[[[μܵ΀{vo΀^{^P^h0FCJOJQJ^JaJ h0Fh0FCJOJQJ^JaJ h0Fh!( h0F6 h~J6h0Fh0F6 h0Fh0FCJOJQJ^JaJh ~ECJOJQJ^JaJhGCJOJQJ^JaJ hQh!(#h0Fh0F6CJOJQJ^JaJh0FCJOJQJ^JaJ hih+CJOJQJ^JaJ#h0Fh+6CJOJQJ^JaJ[[[[[[[[[\\\\&\7\;\<\@\I\J\S\[\~\\\\\\\ĶĶ{{tj_jUjtUJhNh=6\]hNh=6]hNhq6\]hNhq6] hNh= hNhTCJOJQJ^JaJ hNh=CJOJQJ^JaJh#T hQhC[2 hQhb^ hQh$\hQh$\5CJ\aJh>5CJ\aJh uh0FCJOJQJaJ hih+CJOJQJ^JaJ hih!(CJOJQJ^JaJ&\\]S]T]U]0^1^2^x^y^^^^N_O___`4`8`^gd~gdhWgdgd @ ^@ `gdx|Agdurgd}S h^h`gdb^ ^`gdT\ ]]]]] ]!]"]$]%]1]2]B]N]O]R]S]T]U]e]]]]]]]]׿}vlbl[TMT h#T6] hI(6] h}Y6] jh}S6]hQhU6] h}S6]hQhN5\ hb^5\ hNhb^hNh#T6]hNhr6\]hNhr6]hG2 hNh= hNhr hNh=CJOJQJ^JaJ hNhrCJOJQJ^JaJ h ~E6] hN6]hNh=6]]]&^/^0^1^2^I^Y^h^o^s^t^x^y^^^^^^^^^^^^^^^меЮxngg]ShNhUh>6]hQhUh>6] h ~E6]hQh,76]hQh~6]hQh@6] hNhx|ACJOJQJ^JaJ hNh~CJOJQJ^JaJ hQh@ h#T5\hQh5\hQh,75\hQh@5\ hx|A5\ hQh$\hQhU6] h;6] hu6]^^^^^^_9_=_D_O_d_________`` ``)`4`6`9`<`N`ûdzҥuududO(hNh=tCJOJQJ^JaJmHsH hNh~CJOJQJ^JaJ hNhCJOJQJ^JaJ hNh=tCJOJQJ^JaJhCJOJQJ^JaJh ~ECJOJQJ^JaJhNh\h h 6h hN hNh~ hQh~ hQhhx|A hQh@hNh@6\]hNh@6]N`P`[`i`l`m```````````````````````` a a aaa&a*a-adaq hNhCJOJQJ^JaJ(hNh*ODCJOJQJ^JaJmHsH(hNh~CJOJQJ^JaJmHsH(hNhNCJOJQJ^JaJmHsH(hNh@+7CJOJQJ^JaJmHsH(hNh=tCJOJQJ^JaJmHsH(hNhCJOJQJ^JaJmHsH%8`m```` a(a)adahaiaaa#bHbIbJb^b_bbbgd0^gdx|A @ ^@ `gdx|Agdx|Agd^gd~ ^`gdN^gdNdafahaiataaaaaaaaaabbb7b;b5\hQh6] h1]@6] h#T6] hx|A6]h1]@hJCJOJQJaJhQh0)6] hQh0) h ~Eh ~ECJOJQJ^JaJ h1]@h*ODCJOJQJ^JaJhNCJOJQJ^JaJ h0Fh ~ECJOJQJ^JaJh ~ECJOJQJ^JaJ hQh hNhCJOJQJ^JaJ hNh~CJOJQJ^JaJIbJbRbWb[b]b^b_bbbbbbbbbbcmdnddddddddddÿuhZhZhѕI h0FhCJOJQJ^JaJhh$>B*\]phhh$>B*]phhQh$>B*ph)h("=h$>B*CJOJQJ^JaJphhCJOJQJ^JaJ hQhLh("=hL\h("=h0\ h\h h("=h h("=h&o hQhhQh5\hQh$>5\hQh&o5\hQhA5\bc:c>cYcccccccc:deceegdRgdx&gdgd 7$8$H$gd$> 7$8$H$^gd$>^gdddeeeeeeeeeeeeeeeeeeeee1f2fϦ{p{ibXMhPGh<CJaJhQhE5\ h4 5\ hQh@h4 5CJ\aJh>5CJ\aJhQh4 5CJ\aJ hQhhR hQhh("=h("=CJOJaJh("=hRCJOJaJh("=hCJOJQJaJh("=hRCJOJQJaJ h("=hx&CJOJQJ^JaJ h("=hRCJOJQJ^JaJeeeeeeeeee1f2ffffffg'g(g)ggd<< ^`gdPG^gdPG 0^`0gd4 0^`0gd4 gdEgdEgd4 gdurgdgdR2f4f;f>fIfJfKfNfSfWfhflffffffffffffffῸ~wplpbpQ@ h("=hI1CJOJQJ^JaJ h("=h("=CJOJQJ^JaJhQhI16]hPG hQhI1 hQh<hQhE6] h("=6]hQh&o6]h("=hE6\]h("=h&o6]h("=hE6] hQhE h&hECJOJQJ^JaJ h&h("=CJOJQJ^JaJh&CJOJQJ^JaJ h&hhWCJOJQJ^JaJffgggg!g'g(g)g+g/g0g1g2gPg`gggggggggggggghhhhǽ~m\m\m\m\m h("=hx&CJOJQJ^JaJ h("=h}SCJOJQJ^JaJ h}Sh}S h#T6] jh}S6]hQh}S6] h}S6]h}ShPGhYzCJaJ h1x5\hYzhYz5\ hPG5\hPGhx& h("=hPGCJOJQJ^JaJ h("=h4 CJOJQJ^JaJh4 hjO!)g1g2ggghh h>h?hhhKiiiij5j6jjjjgdKvgd@ogdmgdz ~gdAkgd]gd ^`gdW^gdYzgd<<hhhh h7h>h?h~hhhhhhhhhhhhhh i"i#i$i7i˽qq`YUKhQhA6]h{ hQhA h{hKvCJOJQJ^JaJ h{hAkCJOJQJ^JaJ h{hhWCJOJQJ^JaJ hQhKvh#T hQh jhQh hQhz ~ hQh_hQh]5CJ\aJh>5CJ\aJ hQh@2OhrQh<<5CJ \aJ hrQh5CJ \aJ hQh\F7i8iAiHiJiKiMiViviwixiiiiiiiiiiijjj5j6jZjfjtjjjjƸזtttmf_W_fP hQhhVThQN] hVThQN hQhQN hQhKv h{hKvCJOJQJ^JaJ h{h@oCJOJQJ^JaJ h{hQNCJOJQJ^JaJ h0FhVTCJOJQJ^JaJhVTCJOJQJ^JaJ h{hhWCJOJQJ^JaJhQhKv6] h{6] hm6]hQhA6] h#T6]jjjjjjjjkkkk k(klll llllll l$l.l0l2lllll$m&m2mFmNmmmmmüvokgkogkohhVT h{hF>Ch h 6H*]h h 6]h@ohh hhQhjH*hQhjCJaJ hQhj hQh~ hQhF>C hQhC[2hQh_56\]hQhC[256\] hQhz ~ hQhQN hQh hQhY+#(jkklllmmmmnn(n)nRnsnxnnnnnnoooRp 7$8$H$^gdR} 7$8$H$^gd;:gdgd_mmmnnnnsnwnxnnnnnnnno ooo*oUoWoZoƱrrƜƜrƜ]VOHO>h2thKv6] hQh(V hQhKv hQhC[2)h{h;3>B*CJOJQJ^JaJph)h{hR}B*CJOJQJ^JaJph)h{hB*CJOJQJ^JaJph)h{hZB*CJOJQJ^JaJph)h{hKvB*CJOJQJ^JaJph)h{h;:B*CJOJQJ^JaJph#hqJB*CJOJQJ^JaJph#hVTB*CJOJQJ^JaJphZolooooRpTpXpjppppppppp4q6qJq^q`qfqnqpqrqtqvq̻̜tmfm_mTm_LhQhjH*hQh~CJaJ hQhj hQhF>C hQh~hQh_56\]hOR56\] h{h(VCJOJQJ^JaJ h{hKvCJOJQJ^JaJhCJOJQJ^JaJ h0Fhn_CJOJQJ^JaJhn_CJOJQJ^JaJ h{hn_CJOJQJ^JaJ hQh_ hQh(V hQhKvRpTppppp4q6qzqrr_r`rrrrrrrrrrr=s 7$8$H$^gdS 7$8$H$^gd;: 7$8$H$^gdqJgd`gdgdF>Cgd_vqxqzqqqqqrrrr?rErOrYr]r^r_r`rqrrrrssdshsisks𯝈s^sWF h{hCJOJQJ^JaJ hQh;:)h{huB*CJOJQJ^JaJph)h{hSB*CJOJQJ^JaJph)h{h;:B*CJOJQJ^JaJph#hqJB*CJOJQJ^JaJph#hVTB*CJOJQJ^JaJphh h{h hQh h h 6H*]h h 6]h h hQhF>ChQhjH*=sJsKsdshsissssssssst1t2tttttuu2u h^h`gd@2OgdHGgdOZ2gd 7$8$H$^gd;: 7$8$H$^gdSkstsssssssssssssssst ttt1t2t9tttt¾}yodoZUMUHC h{] h@2O]h{h@2O] h]hQh@2O6]h{h@2O6\]h{h@2O6]h{ hQh_[F hQh@2O h{h@2OCJOJQJ^JaJ hQhHGhQhHG56\] hQhr hQhORhOZ2 h{hOZ2CJOJQJ^JaJhCJOJQJ^JaJ h0FhCJOJQJ^JaJhCJOJQJ^JaJtttuuuu2u3uYuZu[u]ukuuuuuuuuuuuuu v vv/v6v=v>vuvvv}vvvvvvvvϼϯϴϨϡϡϗϨϐωx h{h_[FCJOJQJ^JaJ hQhu* h{h#Th{h@2O6] h{h_[F h{hu* h>(J\h{h@2O\h{hv@r\h>(J h{hv@r h{h@2O hQh@2O h{]h{h@2O] h] h{h@2OCJOJQJ^JaJ*2u3u[u\u]uvvwwlwmwwwwwxWxXxYxxxxy h^h`gdMJ gdv@rgd_[F h^h`gdv@rgdv@r h^h`gd@2Ovvvvvvvvvvvvwwwwwwlwmw{wwwwwwwwwwxxxWxûzph`[h h>(J]h>(Jh>(J]h>(Jh_[F]hQhu*6] h{h_[FCJOJQJ^JaJ hQhu*h{hL]h{h_[F\]h{hu*] h{h@2Oh{h_[F]h{h@2O]hQh_[F6] h{h@2OCJOJQJ^JaJ h{hv@rCJOJQJ^JaJ h{h}@CJOJQJ^JaJ!WxXxYxxxyxxxxxxxxxxxxxxxxxxyyyyyyy zzpzqzwzzzzzzzzzͼxxxnnjnjh#ThQhu*6] h{h'CJOJQJ^JaJ h{hv@rCJOJQJ^JaJ h{hMJCJOJQJ^JaJ h{hF<CJOJQJ^JaJ h{hu*CJOJQJ^JaJ hQhu*h{h{hu*\h>(J h{hv@r h{hu* hQhMJ hQh_[F)yyvzwzxzzz{{~{{{{{,|.|}}~~gd,2gdPgd@2O h^h`gdv@r h^h`gd@2OgdMJgdu* h^h`gdMJz{{{{{{{-{0{b{c{~{{{{{|*|}}r}t}}h~j~~~~~~"$ƾƥ~zv~le~^T jhQhe hQhz ~ hQh,2 jhQh,2h>(Jh#Th,2h=> hhNQ hh]1h]1hQhP56\] hQh@2Oh>(Jh#T]h>(JhMJ6]h>(JhMJ] hQhMJ h{hu*CJOJQJ^JaJ h{hMJCJOJQJ^JaJ h{hv@rCJOJQJ^JaJ $^`f,-=AKLMNO{߀58EFs~ !ÿwhlhP]hlh\]h{he%OJQJ^JhOJQJ^Jh"OJQJ^Jh{h"OJQJ^Jh>(JOJQJ^Jhh>(J h{h>(J hQhe%heh}  jhQhe hNQ6] hQheh#T hQhz ~,NO6ׁځ1EI]b^gd>(J^gd"^gd[gdPgd>(Jgd} ł؂LT؃)YeɄՄ^gd".45BCчԇՇ^gd1xgd1xgd~'xgdOR @ ^@ `gdXgd$wgdPgd!^gd"!*7<Vօׅ-.45;>?@R^hпp_UNDhQhSO6] h6]hQhX6] h{hNQCJOJQJ^JaJ h{h;:CJOJQJ^JaJ h{hPCJOJQJ^JaJhCJOJQJ^JaJ h0Fh$wCJOJQJ^JaJh$wCJOJQJ^JaJ h{h$wCJOJQJ^JaJ hQhPhlh!]hlh"]hlhP]hlh\]hlhe]hiltu ()45@BCSV[^Ľvkd\d\dU hQh1xhh1x\ hh1xh1xh1xCJaJhQh1x5\ h1x5\ hQh~'xhbq5CJ\aJh>5CJ\aJhQh~'x5CJ\aJhi 5CJ\aJ hQhheq *hOR\] hQhP h6] h#T6] hR6]hQhJq6]hQhX6]чӇՇׇ߇ ވ%./01։߉!ž蓌wsosgsocoh%xhElhEl6hhWhElhQh~'x6]h1x hQh~'x hbqh~'xhbqhbq5CJ\aJ hIy5\h@chbq5\hbqh{hbq\ h{hbqh@chbqCJaJhhbq5\ hn5\ h1x5\ hbq5\ hQh1xh87h1x5\%Շ01GJt^gd1x p^p`gdEl p^p`gdEl ^`gd1x 0^`0gdbqgdbq 0^`0gdbqgd1x!,-.6@DEJˊފ*;鼫ؼі}ohaZS hQh"X" hQhf hQhM4 hQh<<hrQh<<5CJ \aJ hrQh5CJ \aJ hQh\Fh@c hQhhElCJOJQJ^JaJ h{h1xCJOJQJ^JaJ h{h~'xCJOJQJ^JaJh1x hQhSn hElhElCJOJQJ^JaJ hQh~'xh%xhElhQah t` =>?\]5lo1i ^`gdV^gdV 7$8$H$^gdqJgd]gdgdP 0^`0gdbq;<>?V\]vwÌnjЌی܌,-2;FNV]dhŻŴtbtbt#h `B*CJOJQJ^JaJph#hrQ.B*CJOJQJ^JaJph hQh/s hQh}TT hQhV hQhcN hQhh hQh<hrQ. hQhPh>56\]hQhP56\] hQh|7^hQh]5CJ\aJh>5CJ\aJ hQhM4 hQhf$  $45<=BKRlmo۷{{{{f{Q{Q{Q{Q{Q{(h{hcNCJOJQJ^JaJmHsH(h{h/ECJOJQJ^JaJmHsH(h{hPCJOJQJ^JaJmHsH"h{CJOJQJ^JaJmHsH(h{hVCJOJQJ^JaJmHsH#hqJB*CJOJQJ^JaJph#h `B*CJOJQJ^JaJph#hrQ.B*CJOJQJ^JaJph#h%B*CJOJQJ^JaJphŽɎʎҎ֎َڎݎ$'(*589;BCFIJLVYZ]kːѐҐՐ֐ڐŴŰh ` hQh}TT hQhP hQhA( hQhcN hQhJ hJ hP h{hcNCJOJQJ^JaJ h{hPCJOJQJ^JaJ(h{hPCJOJQJ^JaJmHsH(h{hcNCJOJQJ^JaJmHsH4/01lm͒Β-./bc 7$8$H$`gd{ p^p`gd{ p^p`gd/sgdcNgdP^gdVڐܐߐ /01lȑˑ:ڳxgVxLAL:L h{6]h{h_6\]h{h_6] h{hPCJOJQJ^JaJ h{h_CJOJQJ^JaJ hQhhhQhP56\] hQhPhQhcNmHsH(h{h}TTCJOJQJ^JaJmHsH(h{hcNCJOJQJ^JaJmHsH"h{CJOJQJ^JaJmHsH(h{hwCJOJQJ^JaJmHsHhQhcN6] hQhcN:FGWY\ru|}~˒͒Βڒ ,-./DQRzÓѓӓ(),_`ce#h{B*CJOJQJ^JaJphh#T hQh/s hQhhh ` hQh< hQhPh h{6] h{h_CJOJQJ^JaJ h{6]hQhP6]hQhh6]hQh/s6]hQh_6]/efjkov”הܔݔ126<Z`~۸s^(h{hhCJOJQJ^JaJmHsH(h{hPCJOJQJ^JaJmHsH h{h/sCJOJQJ^JaJ h{hPCJOJQJ^JaJh{CJOJQJ^JaJ h{hhCJOJQJ^JaJ#h$&B*CJOJQJ^JaJph#h{B*CJOJQJ^JaJph#h `B*CJOJQJ^JaJph"ܔߔ56Z~'(uvw ? 7$8$H$^gdqJgdF%gdP^gdf '(ABCDijttt__TH?H?h$&]mHsHh$&h<]mHsHhQhPmHsH(h{hF%CJOJQJ^JaJmHsH"h{CJOJQJ^JaJmHsH(h{h/sCJOJQJ^JaJmHsHhQh/s6] hQh/s hQhP h{hPCJOJQJ^JaJ(h{hPCJOJQJ^JaJmHsH(h{hhCJOJQJ^JaJmHsH"hWCJOJQJ^JaJmHsHDFGZ]^cuvw|֖#'-=klqɗߗ Ǽs#h `B*CJOJQJ^JaJphh `h$& hQhP hQhPh$&56\]h1956\]hQhP56\]hQh/smHsHhQh<mHsHh$&h `]mHsHh$&hb]mHsHh$&]mHsHh$&h<]mHsH- *>?@CDKLO\w {|~ɻzpzllh$&hQhA6] hQhA hQhP h{hPCJOJQJ^JaJ h{hPCJOJQJ^JaJ h{hhCJOJQJ^JaJh$&CJOJQJ^JaJ#hqJB*CJOJQJ^JaJph#h `B*CJOJQJ^JaJph#h$&B*CJOJQJ^JaJph)?˘'{~RS Y 7$8$H$^gdqJgdF%gdAgdP ^`gdP^gdҙ/RSTsȚ͚Књܚߚ XYZ\]e{j{j h{hhCJOJQJ^JaJhqCJOJQJ^JaJ#hqJB*CJOJQJ^JaJph#hqB*CJOJQJ^JaJphhZcmh ` hQhbhhQhP56\]hQhA56\] hQh h$&]h$&hA] hQhP hQhAhF%'enΛЛ378AW[\ktxyÜĜ "&04@DGHOSWXjkmn޼ hQhP h{hGCJOJQJ^JaJh+OCJOJQJ^JaJ h{h;CJOJQJ^JaJ h{hhCJOJQJ^JaJ h{hACJOJQJ^JaJ h{hPCJOJQJ^JaJ;Λ.3WtĜHVjmnҝӝԝgdP  ^` gdUrgdP ^`gd+O ^`gdA^gd;^gdnst|ÝƝǝѝҝԝ%()-9ABпЮ{tj]VVRVVho hQhPhQhP56\]hQhP5\ h{6] h `6]hQh 6]hQhP6] hq6]hQhA6] hQh& h{h& CJOJQJ^JaJ h{hCJOJQJ^JaJ h{hUrCJOJQJ^JaJhqCJOJQJ^JaJ h{hPCJOJQJ^JaJAB7t+h\֡΢gd@`gd& gdUrgdPBDGHKPQTU]abfh 'vwxy{|пﮠпЮЮЮпЈxqiai\i\i\ h)_|]h)_|hB]h)_|hB] h@6]h)_|h@CJOJQJ]aJ h{hBCJOJQJ^JaJ hQhPh@CJOJQJ^JaJ h{hPCJOJQJ^JaJ h{hUrCJOJQJ^JaJ h{h& CJOJQJ^JaJh)_|CJOJQJ^JaJ h{hhCJOJQJ^JaJ$|̢Ϣ֢٢ڢݢ "#$.1CDGHIJKMNOս{pi hQhBj 0hQhV\UjuhQhV\U hQh+Q h{h+tCJOJQJ^JaJ h{hUrCJOJQJ^JaJh)_|CJOJQJ^JaJ h{h+QCJOJQJ^JaJ hQhC&I hQhP hQh9W hQh=s h)_|]h)_|h9W]h)_|hB])΢Ϣ%FGHJLm{kd$$Ifl0% t0644 layt-y $IfgdP $IfgdUrgdP LMNO78F{zuuuuuuugdBgdB.gd<<{kd`$$Ifl0% t0644 layt-y O]lmqrӣդޤ5;Wbqɻɻڪڣ~tld\h)_|hQ%]h)_|hQk]h)_|hB]hQh@W"6]hQh$q6H*]hQh$q6]h)_|h$q]h)_|h@W"] hQh9W h{hBCJOJQJ^JaJh)_|CJOJQJ^JaJ h{hBCJOJQJ^JaJ hQhB h)_|hB h)_|\h)_|h9W\h)_| h)_|h9W"{|ĥ  $Ifgd gd9W`gdpJgdBqru{|åĥޥ !*yծ{tlteTeIeB hQhj]vjahQh)_|U hZVh9WCJOJQJ^JaJ hQh9WhZVh9W\ hZVh9W hQhR#h)_|hBCJOJQJ]^JaJ#h)_|hRCJOJQJ]^JaJh)_|h@W"]h)_|hpJ]hQh$q6H*]hQh$q6]hQhpJ6]hQhQk6]h)_|hB]h)_|hQk]h)_|hQ%]h)_|h#T]&hkdۙ$$Ifl!- t0644 layt-y $Ifgd hkdTa$$Ifl!- t0644 layt-y"#$%}Rݩ?y}ǪȪgd sgdtggd;gd#gdj]vgdBƦϦצئ&8Mjçҹݮ맟wodo_o_W_W_owhZVhc8\ htg\hZVhG6\]hZVhG\hZVhu\hZVh;\hZVh^K\hZVh$,\hZVh s\hZVh|\ hQh sh5C5CJ\aJhQhu5CJ\aJh 5CJ\aJh}O5CJ\aJhQh/!h5CJ\aJhQh s5CJ\aJ hQh\F"ç"#$%}?ƫ "*Iʼث挫zثzثi_R_R_R_R_h{h>(JOJQJ^Jh>(JOJQJ^J h}OhYdCJOJQJ^JaJ#hVTB*CJOJQJ^JaJphhGCJOJQJ^JaJ h}OhGCJOJQJ^JaJ h}Oh}OCJOJQJ^JaJhtgCJOJQJ^JaJhZVCJOJQJ^JaJh sCJOJQJ^JaJ h}Oh sCJOJQJ^JaJhZVh s\ Ȫߪ.:;y{ƫ8Y^u}ʬ׬ج 7$8$H$gdVTgd s +/@UrwحJ>AOgd>(J 7$8$H$gdVTgd sܮz{|ͲԲղɳ:WXYZʹ~m\Nm@m@mhZcmCJOJQJ^JaJh}OCJOJQJ^JaJ h}OhGCJOJQJ^JaJ h{hZcmCJOJQJ^JaJU"hZcmCJOJQJ^JaJmHsH(h{hZcmCJOJQJ^JaJmHsH#hZcmB*CJOJQJ^JaJph h}Oh}OCJOJQJ^JaJhGCJOJQJ^JaJ h}Oh sCJOJQJ^JaJh>(JOJQJ^Jh{h>(JOJQJ^JOPgįɯ$,?S #?bngd s̱0<Q[chivyz{|ͲIɳ8T`gdZcmgdZcm 7$8$H$gdZcmgdGgd sdataset$GY>=y1 & dataset$GY=dbhmin])) return(c(no.ind, no.spp)) } # Counts of S and N in a randomly chosen area spp.per.rand.sq=function(dataset, sq.size, dbhmin=200, plotdim=c(480,800)) { if(sq.size>min(plotdim)) return("You can't use a square larger than the plot.") xlo=(plotdim[1]-sq.size)*runif(1) ylo=(plotdim[2]-sq.size)*runif(1) xhi=xlo+sq.size yhi=ylo+sq.size return(spp.per.area(dataset, x1=xlo, x2=xhi, y1=ylo, y2=yhi, dbhmin)) } # Mean and st. dev. for S and N throughout the plot, at three spatial scales spp.area.sq=function(dataset, area, dbhmin=200, plotdim=c(480,800), replicates=10) { no.quadratsizes=length(area) m=matrix(nrow=length(area), ncol=5) sp.per.sq=data.frame(m) for(i in 1:length(area)) { hectares=area[i]*area[i]/10000 sp.per.sq[i,1]=hectares sp.per.sq[i,2:5]=mean.spp.per.sq(dataset, sq.size=area[i], dbhmin=dbhmin, plotdim=plotdim, replicates=replicates) } colnames(sp.per.sq)=c("area_(ha)", "mean.ind_(N)", "sd.ind_(N)", "mean.spp_(S)", "sd.spp_(S)") return(sp.per.sq) }     -  PAGE 2 - TWXYZ,-Qu4gd+O 7$8$H$gd+O 7$8$H$gdZcmgdGgdZcm4578ijqr "#*.HI̺ᩛxjYjYjYjYjYjYjYjYjYjY h{h+OCJOJQJ^JaJh+OCJOJQJ^JaJ#h+OB*CJOJQJ^JaJph h}Oh}OCJOJQJ^JaJhGCJOJQJ^JaJ h}OhGCJOJQJ^JaJ"hZcmCJOJQJ^JaJmHsH(h{hZcmCJOJQJ^JaJmHsH h{hZcmCJOJQJ^JaJhZcmCJOJQJ^JaJ 2O#1EHIKLNOQRTUdef$a$gd#`gd#`gd+Ogd+OIJLMOPRSUWX^_`adefg h}OhGCJOJQJ^JaJh-yjh#`U*hi mHnHu*jh#`Uh#`h 4^jh 4^Ufggd#<P1h:pjO/ =!"#$% Dps$$If!vh#v:V l t065yt-y/Dd _(P(>  # A"b/x=].n.x=]PNG  IHDRsRGB.IDATx^vywqJhڱ ]=jT.s)g @`y[^ # X @L`  @' @  @yk v`= @X @k ځ5@< @O`  @' @X @  @{  @G@& @ @ 8O`- @X @ pz @\; @ @kxp?5A @O`  @' @X @+Z @L` @25@pZ @' @  @`/ځ@v`  @X @k ,~kp?5@ @O`  @' @W1. @: @dk+<@8O`  @X @^p @\; @ @Y ~kp?5@ @O`  @ch] @?2u@ Wykp @' @k ځ5@v`  @X @  @ W{VYf^ @c䙠   @m㣘 TV/ @ LBGmB +d| @LY/ @ LBGmB +d| @LY/ @ LBGmB +d| @LY/ @ LBGmB +d| 0ן- W2&@4gX ^XGc @<\, ZlFKj dK  A! Q&$@aR,.<|ea @(QFS&dLUX5J + @*2AV @dJf @[F=}#~2  @`rG`wD;B3=/({Xt5f @@L2 @@ B ҿ&F@z1q;Q}} @@\d5iYc$@5_;XfM DU/ x @!2A:=~%  l  @co8pu 3\ @`8%l[7L ?vp"/;o 4DZ  @Bd ޱ'`g. V J& d` @``B&8 , @G wOKwKAoqN @@XLL<*5{}$@b!xA#(%"<&#v @@@LbAE OF  @@LMgG 0L0U9Md tv$@S Sd @@LMgG 0L0U9Md tv$@S Sd @@LMgG 0L0U9Md tv$@S Sd @@LMgG |ۇ  iǏX<4L0iaM)#W + @J2A%X /?7?gߢ=  \@ R,pi`<#46 t @@L g7 0L0YAMd pv#@ t @@L g7 0L0YAMd pv#@ t @@L g7 0L0YAMd pv#@ t @@L g7 0L0YAMd pv#@ t @@L g7 0L0YAMd pv#@ t @@L g7 0L0YAMd pv#@ t @@L g7 0L0YAMd pv#@ t @@L g7 0L0YAMd pv#@ t @@wEwzޝ=ڼ{i|&(y0;"wn&@_;8SG 7y F@&S !@]gt-  @@7>f{ݖ  @ @OQ2Ar׬1 m @bYi&@'p 0+=C 3|`d PJ"[vk  @`VG3<`Ef^ 0@LvqMo-髽  @`G'H#K?Wލxjj_  @`E8!jDuk @@Lp}$@ lLF8fdӝe1_HWhH3V PN w}\MD3T%Ԩ^{&)(s?A"Yl&@r2A Bq XV ',e @`b`@@&˦ @`bp[ ߱9B15h,(v ڏ,/5KQ̵V @Z2A-Y @w0|8]1(~;X @3 Xg @ - @Ѥ[?/]%'@3 || +yƕ`N L L̟ p0E g̟$U3H_= @3A9! p_<l }q- @'`آ|)1f8/o' k8vpІD j )3<`:48̢u,: @``J  @ _t @R4+',h;GS13jhhs`b @LPKV @`,O0(ËP6#@MOæ(>bilF& &/ @1e3 0f9 #@'5?x%>J$@~^gG6yzQwDbI.";yX0zɍځX`% @)1~ Wߝ11)"({O=+(̛ @`nG%7; D)7a @czt@{ h,%1Y ɳ} an}Xg)h;:OxR`aF @ @@xLF  @@Q&xx">a/p~  ( @@w `-pB+/&+h%5]yFNOm #p z%@<(ZE̢>z%@OE$(> :0& ^ۘ  @WO`+F=n @e\;(5 0L0j匛 zj*p̢tk64_ָ  @P' Im`i, p"ځ%BdEv @|9ց @L@O@&fDrߕ M @@ G#5t \zNs\ @@bAy_- @@V  @h2A I @LPrRA\ @@?{ k] PZ@&(-= 0L0f݌ Jj) Y7&@dҢ#@c (5D=d2^pPQ+ O@&(`5Ad?! @ T 8j  @LC] @ L&FDz=I jbD @LC] @ L&FDz=I jbD @LC] @ L&FDz=I jbD @LC] @ L&FDz=I jbD @LC] @ L&FDz=I jbD @LC] @ L&FDz=I jbD @LC] @ L_??ۓD 2H~ĂLA @@0 )=łA @@< ^M r rڲ! d! n O@&ȯI0{ @H2Aj ' 3$wݷwoMNwBdi*ڗhxΞtUi\ 6 @@m  @3ՁWSƨQ @!1|LjBD"j&h8J&Q[5MTfLCZe??}]ֆM2Q2vh}F]d5m(~;F{ CLN?eW$wa) rЖ ^"S1 @(3Kȏ/Qq @GA3ccG6&@C~`5d 0@Lp|J 稙Y @!2A'(6  @@L0 @@_  @@ J% D T8 @@_  @@ J% D T8 @@_  @@j%\v @`4Riie#S@&8[ i; 0L0f݌ E G@&T KX6"@1duK^v @`4`/# q*M@&bKu\JF F @:2AW @d*f @LPU @`4`/# q*M@&bK'GuJ GH/Bܿ+9P  rߌ,]u#@2AĪh/ 5ߟ؟3h_$= @2rA .  cؽN@j O ƨQ @2Ama @1d1d @LP[X @` `:%- >C@&NFIj O ƨQ @2Ama @1d1d @LP[X @` NEcT(  @=# %֘  @` uR H& Mf ^Wrn``x ޮ 4 LpTt"K4  @`q`` @2@ X @_  @y5e~E @`) ^50Yx/ @dn @L @2{ LG>,^  @b_h/3qX\yT;X|!>< T%X 5kB @XkkVڬ  @@4 ZE D Ux @@^  @@4 ZE D Ux @@^  @@4ɟcx @E9\DYJ݋{ƱQUdѵ"K# @`x`(" a^@&&@E5B /  @"2AF @<`("&s?O2~&u ޝ!G;+_ .BlfZSmn1^ 2 BnvPtOh2 B#K"~eEi~ 1µlJ`X x Tp2  @ 2 2̚n mAvp4.$J_RҢg W#V߄cbYyߵ!P!˖;h6Εx?E?-LpJd (I @S @` `2$8 Nl@ (I @S @` `2$8 Nl@ (I @S @` `2$8 Nl@ (I @S @` `2$8 Nl@ (I @S @` `2$8 Nl@ (I @S @` `2$!AU@&5G4؋' &*L$=lΧiʏ>~Ăs2[ T@$llK@ye kkg8}\}|Sۙ~m==8hS;V"[XE@&XS`OGfI=ň}:~#d_j1WQ%A/yx>[ =^^?>oPIv*$@`/ X<_OI "˻pm@``ZۧcPj3}?>Qm{W+{m#?]X8W8 ,nQeFWٮoٝ2U3f\pe Wj6c$v!0L0JsB{.nvpS C}wj馁>]x7O'kK .R6و0ն[힎/7{g:Ц٦ ?t8ӎwSH.\im]G\DLC]/Le2  @L]^#@dT6$@S S @e2  @259 pY@&LeC 0L0uyM\ .SِL- L]^#@dT6$@S S @e2  @259 pY@&LeC 0L0uyM\ .SِL- L]^#@.nV<{9IENDB`0Dd _(P(>  # A"bC0,:::_"bYX90N0n0,:::_"bYX9PNG  IHDRsRGB/IDATx^т:@X4sJ !@n/@  X @_  @ukp @X @{ ށ5@w`  @'& @X @  @ ykXuA  X @_  @ukp @X @{ ށ5@w`  @'& @X @  @ ykXuA  X @_  @ukp @X @{ ށ5@w`  @'& @X @  @ ykXuA  X @_  @ukp @X @{ ށ5@w`  @'& @X @  @ ykXuA  X @_  @ukp @X @{ ށ5@w`  @'& @X @_ϨcԩA =x&ּ5Gxf| # 8d wH} @ F@&q6 . d @@Ll ]@&! @ ( @ LC#@12AQ @@v {Gbdg @2A1F!@dRt']2Aw-S0x?? R%0bLbS-% Ԓu\A2AmR$t#0łW&f)z1ڹN)T :(N@&e &@Ud*J k  @@  @@sNtL PK/%r2$ @@W]@Ci!  @@" Q3BtD&(sKkyg3'v G ,"lLș}  @=blyyOk¬  @@@L3O @2B wX @)1|=ןY @'ߊdk"^,)k6k MLB6J @wμ*zw}&hyfO G ,/&E 41Q*4<łQלy @@N`/\4"@!gK^:43)H("LXp(Ȓ Ɠ5# &5}:2-6A\ 0H{.z kgE4x;M[/D&  @@2A]S3B⿬/tL&w͞Yc`]n%t6E @ ^`>q& Q RGq @ L@&6H- n @@LFm  Z@&H @0 @ @ L=#@a2A @@j u{Gd0j @2A( a"@dQ ¨ DR ۣ8 & Q RGq @ L@&6H- n @@LFm  Z@&H @0 @ @ L=#@a2A @@j u{Gd0j @2A( a"@dQ ¨ DR ۣ8 & Q RGq @ L@&6H- n @@LFm  Z@&H @0 @ @ L=#@a2A @@j u{Gd0j @2A( a"@dQ ¨ DR ۣ8 & Q RGq @ L@&6H- n @@LFm  Z@&H @0 @ @ L=#@a2A @@j u{Gd0j @2A( a"@dQ ¨ DR ۣ8 & Q RGq @ L@&6H- n*Su'БLQJ4G,ձz z (XPhd:j> @L@&(s} , ,=+8' 7 L@ 趁 ^@& E`zưjILP[  @@2A}R%- v| ЇLGTIA&<e32UA8^M8N/ͤLBݘTj y/^6[ I@&6D ii jQǻLp~-p`=# @dV PO@&g @'n :2I@&[j%@dzLz zZ  @@=G~nRoBo=h+[sX=oi[y] ,r`OW.nww Sʜժ@+[Τ~OĂx|#S3Y.jdnoL0]Fy @d!x*(X, ?iş=2^R\fM)0k#X /9;c ty۽lO@@LP6{ @2.Gw P`GN/-ߊ~̭3&l @Vg;_iܓ'w-0>+JfGE ,y3A !0a#)W`?ʢIw*'@#N gnKd p^`OߕvbSV9NK7G;S6I L`ckZ x P `v!@R]xgQmR$.Eե\&k΢#+({T0^n|  @@Y}&xjVvk# @Y ,~eq.o7\N @[LL(I++[ @ $,bC휉 @kek'h @W2W\6&@ 쿳hzp&F2 \'H\&eD(5^Q5  @%o  @E$@$@  @D> @`3e"@'snAU У@Y=5 @zSG$@r]'OBBS$p^{X@ " 8 䀓v'Уz젚 |+p(|{P @ xgQw-S0 嵁g&i'-o(v¢+f8/0o:<gLGJ5 @@YV# + O'O}ɪ!@ dk{bK @[`NXpc 0Qgn^ @R@& @_Y"@vLO:Zb D;yعNm]<>aYS @*V&*8 @@_g1Z!%/0?-  ,C #j2B~?AHU!@D`ykKC E\{=P36Ք,0_*:N@5T=+!8,e2Ax o{TF g 7Gi @ P`yOt[H? @@.e @3Q\< @9V2nԹx3Z\/&8"H Mу34T  0@Yls/E_eY{{lv"@b+ė8v͎$X`~e5$P pR3+_ I @ |J8[`Ɵ>>v͎c ğŶ,_^E {\{Ytyd8 R*p(T  @ [ RعN0ǂOo1( @@m{ VbT>'@b3ALF!@ g[ gǿIN|+ -zSڞ"×V @+{_ @@2AS6XwM3v8v[b|#pEˇI]9)iw.x O IK -O6; @`@ N`Qi$>jY]ku @uϙþ\ 6'@Dg1&jR @, >p!@Ur]'X~)3L?w  @x_;-3"@OC@V @2 &Hxg5@ ^v( @ @`)G*3 ) "1 J$l|Bi8)P $  @@BLpJ"@N 'Nϧ?4 @v25H=`h  @!2| @F @d;t  @߁y}T[ @/ :r"_T2W , zoKfb'@<g1J @@KLE-cl %EQ!@(wTGTrb1H ޿U+X @ X;?k @;<]V?wmW @YN >xQm^ Б@YwE:Z.J%@ \'X?[Xą š @ X ,H)%9UkM@ 0@Yj @ 2lZ @ @`>ŧ J]ڦeӼ  @ 3S{1wb(obI Y ߨ;g..cX̶0::wL= @`HLFK&Z^.wd$@S6޵+a_]n0ڲuu[4'@ X ,><+Maׄ @g{ƣ^: V`~k{ P,ۺN0#Nc/?ixy(n  @ 2jBb 0@ 55 ЋLKI Ojaq @@;Ƃ^@  @@g 4_! @`! O "@|  @k_G^  V @@@&(@?ӓ @@2Ak_2bA~'dxv%@ 5T_b$@2  0p @LP ^1ל͖ õԄ @@LPf' 0L0\KM Elv"@ õԄ @@LPf' 0L0\KM Elv"@ õԄ @@LPf' 0L0\KM Elv"@ õԄ @@LPf' 0L0\KM Elv"@ õԄ @@LPf' 0L0\KM Elv"@ õԄ @@LPf' 0L0\KM Elv"@ õԄ @@LPf' 0L0\KM Elv"@ õԄ @@LPf' 0L0\KM Elv"@ E_M$h =1$T\ W&x&gX>XS>!+aJ 0L0bW͉|/"LO~79ڃh  X ~mA.h `_. @;2^ @ :>p}#>f^vLLV5opM.?upre$@\'t e @b)2ƴψ:(?w=g߁TEh  @@ c @gwS롊  @)1|Nc @8g5zYcI?wpN5& dz @@Q  @@6 [GCm܍J : F@&hnT M@& @62Aw @l2A ڸd uD= @Lݨ @ L#!@md6F%@dlQh# q7*& dz @@Q  @@6 [GCm܍J : F@&hnT M@& @62Aw @l2A ڸd uD= @Lݨ @ L#!@md6F%@dlQh# q7*& dz @@Q  @@6 [GCm܍J : F@&hnT M@& @62Aw @l2A ڸd uD= @Lݨ @ L#!@md6F%@dlQh# q7*& dz @@Q  @@6 [GCm܍J : F@&hnT M@& @62Aw @l2A ڸd uD= @Lݨ @ L#!@md6F%@dlQh# q7*& |OT aiϏXPi9,d V:2ĂlKV= PI@& @3`akkV @`]k7kɶ зL3}W @ఀLpʆ @`h`8, !Z@&&G lH n @2a* @dkr @ఀLpʆ @`h`8, !Z@&&G lH n @2a* @dkr @Ɲmx<:X @@ zLp~]=SE|KΗ}s7q;wײwP[  @@2A}R%- v| ЇLGTIj ! 'U @2Ama'@}}4G @ Pu@lC @2A( ؆"@dQ  E 4 ( b$ 7Gi @ P@&6H, $n @@Lm( X@&H @@ P @ E_s~~~>umlcXs^Gf}o9~dF˿SO^Gl~5\Zuq.1&;Ly|?^N埕ɾW; >[2ތv%Nfå`I_8[,|dqyCG6GDj jc!'U{ `zOp}~xm8dGku`M|GyVo,>$ <ֳӣ6.엸==P>>VXv LR [&D 6nƻ_xhsď [ 0 1,o-؁9O0sIAhz֤*OSa1wG}#4lCvSZs9@f.z:8իƑNf5*l{N;i`>C AM&>Yxs -w G0\&ٝ\Ϯ$h-pRd"O O4ޯ꿄0?ƚqox~cF)S=\nev =-ʍZ!p@uH6!A|G*<^j[f}㏖|o<߰j'+gC_PG#A@&5VԻzޝAG _?EOлۀ@_2A_R-*o΍cNo&b#yO]+J \@&'7 ?x(p⫃̺_u);(2-h"pFÑm t؂JB R@&6h/X>GG&qfPKgjS|:5_C ou~?n<'iW{]5qRQE( D{#<͖`u_{hROA!o^T_~8x}3y1i"Fu4PpWOrjϔe.O9'ew'on2Ama'@}wGTIj ! 'U @2Ama'@}}I @LP[  @@2A}R%- v| ЇLGTIj ! 'U @2Ama'@}}I @LP[  @@2A}R%- v| ЇLGTIj +?IENDB`s$$If!vh#v:V l t065yt-ys$$If!vh#vm!:V l t065-yt-y8Dd _(P('(>  # A"b7U/Φ]oe\7 bnT7U/Φ]oePNG  IHDRsRGB6IDATx^ٺƒP~wޭ26GSD rX߿!@ @d  @_  @ukp @; @ @kp @^~W\ Tn S5ͅo>GN ݩ]n  G}@GG*$ t P^.E`RXo<0pM&+h# 䮵LfG2nq`(B!-AAڝLpVE`yqgf_L  pB`}q}l\@&^@'@@*hR&P$C$@@KP}C` Y@ \]uNa,2At] @`@`4L\wQ@ *$4'!+HuLJԽC @&CvJ:HO2AB& _P3Ic2AB ǭR&&KL`m @`"`bLp) Ĭ[QDAG(]Q*e(%M&fLL^B0SU&+h +~s`2u1* ηL0_͘  \~2AyS- @@?n2A9>e2  0@0\IB H&U.%@w) ; x+QL&AJ4q O]&( 9pvd%6A iKib2A'x @@pd˂x50b BOPI@&YTjoB @@ /!Qȣ "W FK)uω=M#Q}ྡ PQ@ VƭMƑjNR1$dH2V83 Ʃ @R" ta) G/~  *DD_  D zpjA@& @i2H03 ƭ ^@ H_X bh # eY*iBkT< DK)a V ,glKk > X  / / 樳Y O@ gs29/[ @@p}dz'@ @&d9 0@0@ ᜀLpV]") Y"@ EqL` @(5C@&衮O2 :לdm< ,7E5W@&w 7[u\T@&(ʩ1<?~N,0d}#[ @@`md 2U\8*|m纗] NK,?t :@t~-Ft  Bٌ LF@a0 + 0@0jeLPRC PՄF(1 j kv_M(+ ) pO {wT j匛^P{`'PI@&YZ 5o%j]Eu w^M~ARh,LlM7k&(2 @|jY@&N br``# X dk~ G@&ZK.W@&"W`}fNI@&T޴ V3 3Vݜ~8l[O^=I&-|i_3>~o85Ǚ Mڈ"~~w>tzkXPpO)>doY{'@ R@ ȷH̨g zj2ϟEJ e `vIar$VE5:;xAP/ M ֱ{mQ7XjVu42sBy~yёg-=yki[3%,0w=4r( b0 PcG@&fJ @`_`Eˣ}GiN5dv?N]tk '  WC9l\ 2j$DJ&]$A /!gWd k _`E.p%t L@ HVP * -a# 䩥  S . CzUyYךy8)tr6'@uo/):󻣻S=?{j ^q ڏxtv$pGzٗsD @ LXJ`_`}_'V}n[%po6R <_i-SUdؿN\<|sFM!a; o ? &{۟Ih2i2;\kdxu1*\!h-? n @`pb @~&(ҍF$ T, 3rryyѷWMgFF1H# ^nRz0MM$@@`( W,~3@0mM@={2kn"@`[@&Bp 8"85Aևvώ[ΊٞS;h~Q|9lF`]gLG/hgzr{3~t5y|2: ?ww6th^>e @g tR?٤M@Q]cXNȣ9tÄ tz`MGNg]s%0;=H $ ?$D4%ڟwb?LK'8}"B` 8 䀜7aaJa 8 2y'@਀wA Um pM`:z`}S5h{xp4Y %`W( D1- rVz$@L;G ^10w \NgÖp`dL5h& 47yA3<'ȼ @@0 dy0Nq٘28}бZ' +Y`:Nಀ\#d^,%kn $] fVF2Z!@W}/rjntUg PJd+Uvk~)a!y+, ?z% (Wͦ@PU΢z( d9Q;f9 bjڌWhî;JtGϾ (0D&xU?0Z1go%'Eۗ^B5`F$() .Iu%6A ?w0` *%n+S$3%%K@`>ŷ J]SNe=W'Y1\fQ/P ccX<_]6~zo:ugq(+a{AYs E (ƙC@ QG @L{#8BMBCx ]i7Xr˺`]&N`L'QJӮKǨn X-7N@q+O"'qo%:neKr xc׮o4X<o0Rsvɜu7k!ڟ,O!Jno'k leg: 6Y@ :F@!'2s, \}s'@L`mL' LWr&@ 8ՠ1,?K,cH,`IU!@`S)k?-Y{͸VGŅgmh)y  ,Ǖ/² s% >;Xϡo% O. )Y'lN@`'RVTvZ#@`r'1&_riXJKibL#0o 7P4JJRI@S@de("(*2l @@^()  x`# ykf Z(룶>3 |.$/ J`~U-sE@ f"?gn^3UБ+q6Gڟ׿ KH4]@ ^ @ cA(#ߒ]dߌh)S3-뫯[[õ3 ?y^Jjf!@(_|{ e["Pۄ @ @SL1C\@C<vTl ?}.ŀ[ G@CͼBkBr쿟;ƟkjĶ  ?gi1 ?zZݫ  V@&h7 x [y+KH#+[e=Fmg]X/Cò ?ww5YuYnZ"@2Q9V9n) YCVCL6"@@ K%KҢ#@22`e:%@R2A)<\>y 0L0eٿOZ X ,& Bk ]GZ x6p S S͗,@  ]@&^/ûC?t ?{W@H@&"4 /P dK2A@pϮH+ - ӕ܄  pL@&8e+ K%̓dccŨ 0L0N-*K*O 0L0@*'@@ I!MC H^`#@@9x- Ĉ 0L0nmnL hw& 䬸@fE2AMNm uK2A^ VQ!@@+t~ Y@&HR]o%JRH @@?}/(g%+ @&@1d1puU9 @LxMgO@&&F$s J @0T9 9d`u`3\ ꯿ Rd0s L 1dub(  Y@&P= @ dk(^!#@@`J C K@&12d @0ha ygLJ ZO^3V nA&xOfJ4Qa S`L~y5+ eAv @*  !`[`L8 3q  C&X(\x~z`P0JL/?%X] w}͎nKnڝ %ױ  @V:W  HELQKm! EGF{]*Qխ1 m @@VQ|pPC &j6/dh1D&ؘ;]U㌤켴Fvw=Ծ  @ @L15 w}͎dZVZ%@:3݁V:U PQ`g kg{AsLUi8/dLpjKcge CJ{*۾~̅ b"@2AuV @LP^ ( - ܪ3$ \\'' \F W*#\Q- @p A@&8W%  @ LpV , @@4hR#@2 lDdy+Qm pB@&VKɦ \@&Z@ m'@s2g/:5 >P ̀N dEdH! AUm pE@&@peه*%Yֳy @uO uE{ @g a3 @2Sg" 7)I @@1I3@Pli̘ ,< @t@ (|EAk* PX`LD @ [ҭ["@3W  @ @L d\DUgbPeh2 $KfN @LPU @ LdLUX5J Jf @LPU @ LdLUX5J Jf @LPU @ LdLUX5J Jf @LPU @ LdLUX5J Jf @LPU @ LdLUX5J Jf @LPU @ LdLUX5J Jf @LPU @ LdLUX5J Jf @LPU @ Ld? WQ&@dn4² >l _ִ @5 @@6CE <_3V|!@O2B_kG@& @?2u@  :5@N`  @X @{ ށ5@w`  @'& @X @  @ yk$U'̋ Μ /Gh_þ´M;wkAÕ}  @@  F j k b(  @@m  @@  F j k1c @ uE . @2ACl] @dch @L[W @```h( 4X@&8F  uE . @2ACl] @dch @L[W @``﷪ml3pſ1#>BnsL'_яXjzrZTr?&n)a/#cyCG ͑HA©:l)˝rRLP[xѵ}Jwp˶aʢg+R+ >I(kʅg}r ښLpMSo3EYVpv ^K"AEnB pH`Lq,w w{i>ď [ ̘ o=/܁1o=<@py8opy >xirU1|>^٥ci v=ė |LP3:YeVs9YqhnVc}ۜvؽ @C7/'D/M2K52N< f%\#H%Ar , \#H% * @2e:; @T2Ar , \#H% * @2e:; @T2Ar , \#H% * @2e:; @T2Ar , \#H% * @2e:; @T2Ar , \#H% * @2e:; @T2Ar , \#H% *Vgڹ8R2A)IL$PcSy7=mUk7Jйf ƩL'S?/<2f@, [}* B |>uv |0'c2e@_K}=w叛L{e5-w`n_ xL;uOKc <|_ Ya/al1m<9lR^qeQnL|Uk4Np&|<_?؞~7_={:<㕃O]- Pc VY-\-| 7b eھٹ1_߉X|ƑF޿wpde7Rh. 4'!!cQ7$ N5ګlCVؠ F @ G0J^] Zj+j{#hel#^o_88])m]X2!}4__?l<>pG[|..! ĨQ @2Ama @2A:%- >! ĨQ @2Ama @2A:%- >! ĨQ @2Ama @2A:%- >! ĨQ @i I|z_IENDB`s$$If!vh#vm!:V l t065-yt-ys88666666666vvvvvvvvv666226>66666666666666666666666666666266666666666666626626hH62666666666666666666666666666666666666666666666666666666666666666062 0@P`p2( 0@P`p 0@P`p 0@P`p 0@P`p 0@P`p 0@P`p8XV~ 0@ 0@ 0@ 0@ 0@ 0@ 0@ 0@ 0@ 0@ 0@ 0@ 0@ 0@_HmH nH sH tH @`@ NormalCJ_HaJmH sH tH :@: P0 Heading 2$@&5\VV <0 Heading 3$<@&5CJOJQJ\^JaJDA D 0Default Paragraph FontRi@R 0 Table Normal4 l4a (k ( 0No List X/X Heading 2 Char$56CJOJPJQJ\]^JaJR/R Heading 3 Char5CJOJPJQJ\^JaJ:U : r0 Hyperlink>*B*^JphPR@"P :l0Body Text Indent 2h^h`R/1R 0Body Text Indent 2 Char CJ^JaJC P0 Table Grid<:V0a dCJaJ4R4 #`0Header  !:/a: 0 Header Char CJ^JaJ4 @r4 #`0Footer  !:/: 0 Footer Char CJ^JaJDZ@D "0 Plain TextCJOJQJ^JaJJ/J 0Plain Text CharCJOJQJ^JaJ2X`2 6@Emphasis 6]^JPK![Content_Types].xmlN0EH-J@%ǎǢ|ș$زULTB l,3;rØJB+$G]7O٭Vc:E3v@P~Ds |w<v   UMr5$ !"#h$%%&9'G)~,. 0m12345;679:t;K<=??:A"D:FG1ILTMMOP.QRSSUVWSZ[\]^N`daIbd2ffh7ijmZovqkstvWxz$!h!;ڐ:eDenB|OqçIgZ\]_`bcefhijkmnoprstuwy{}~0m=~!$S'M*,/25A;?NBDFJlMOSW&\8`be)gjRp=s2uyՇ?΢L{ȪOTfg[^adglqvxz|!8@0(  B S  ? OLE_LINK1HI  _ e T Z m w nz47PWX\]``cz}UY  AAAF"F#F-FFF GGG%GGGGGGGGGGGGGGHHHH)H1H>HHHHHHHIII(I)I6IIIJ$J)J6J>JAJQJTJoJsJtJJJJJJMMMMNNN"N6N:NNN8O=OLOQOAPHPQQZQeQRRRR!S&SSS(T/T7THTTTTTU UVVWWX XX'X)X2Xh?hIhLhUhVhWh]hfhghhhhhhhkkkkl l=m@mmmnn nnnn$n5n/p8p^pap rrttttttttttttttuu uu1u2uLuRuSuTu[uaubucujupuquruuu{u|u}uuuuuuuuuuuuuuuuuv v vvv v!v"v$v*vAvGvHvIvLvQvVv\v]v^vavgvvvwvvvvvvvvvvvvvvvvwwww!w)w/w0w1w3w8wUw[w\w]w_wdwjwpwqwvwwwwwwwwwwwwwww xxyyyyyy6NSÝ"$28ǃЃMRsƇ͇҇ه&*138>ACJNUW\befqtwx͈ #/7<?EW!0CJPV\cʋыҋӋ֋ ')*1=DKMNUzڍ;F_ekrΎҎ؎()01>G[dl{؏ "+1AJR]^g&23>?Hđ̑ёבQ`ɕΕ%ÖHYɗ̗ hn _j}ěʛڛ )>JKWYbhxȜ֜!/9@BNPYciqx~ѝܝݝޝ!)*5:AEMQXhrsz|ĞΞ؞ $,9HIʟԟ ,5;AIRab49AGKPX^josx¢ȢɢʢѢעآ٢ܢ(.<ADIQWXY[`jpsyãģţȣΣݣޣ0678=B[`bn}¤äĤƤˤѤפؤݤ )*,1Υ(+:<JLdʦЦ3BU\^djqڧݧߧ "%&1478CGIdߨ 7F_crv|̩ͩԩթ)067:@AGJQRY|ƪϪժ emdly B E PYVW qt}*,]d!'48@HX]13`d^cUY`begjloqtv  t y ! !!#!<>>>A>>>A?H??? @@8@:@>@A@@@JoJtJJJKK[K^KLLMMMMMMN#N6N;NNNNNNN9O=OOOPPPPQQQQRR[RbRwR~RRRRRS!SSSSS0T7TTTUUV V{VVWW XXAbftẍ V͊1:q|ʋҋzGP#>H[e:AR^*=fz1Znӓ%fzєQaORӖ֖BH| ̚ ktGKȜל09jq~ѝݝ!*ah %,DH|~ş(,BI]a̠Ӡ̡ϡ'0:AQXgj~JNz~٣ܣ*0`bϤפ ')NU*+adCLڧݧ"&48GGNX_ǩ JRު333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333ABffhhyyyy&'M w>88^8`OJPJQJo(- ^`OJQJo(o   ^ `OJQJo(   ^ `OJQJo( xx^x`OJQJo(o HH^H`OJQJo( ^`OJQJo( ^`OJQJo(o ^`OJQJo(w>x        yLu7Z%x[i k@o^KUXS9lE P d9% & M. UY pb 7v t @ J j  V  @B ",7 o z &1/Jkn9 $,7hqpR$&g4+:dM}S{9WU0 B@%'<Q":5|r# ^im`LabF<`IPy]gn&o O9tg1xT@c RF @W""X""Y+#H#z##\.$V8$%Q%&&x&@'}M''!(0)b)f)4i)*M*Z*u*fz*h-rQ.Dj.0&00]1,2G2OZ2C[233S7356Y 6/6hP6g6@+7c89+9919bf9;:7;V;<<E<=("=T5=:=>;3>=>Uh>@?@U @1]@x|A]B5CF>CBD*ODSD]fD4kDE/E0E ~E0F>FVF_[F\FPGd'GPBGHG(H;HVEHIIC&IBInI J>(JMJqJV4KML[-M@M!rM7NNNPN@2Or6O}JOjOwvO}OgP+QRORRR vRTLSNS~S-T^RT}TTUTVTcTUU'UZV\VW(WhWmX X6X5 Yr(Y UYsY}Y ZCZR_Z}Z\>[%A[|O[\!\$\V\g\.]Ph] 4^|7^b^j_ `$`#l` t`QaRa!b bX_b/jbwWx~'x]0x~,ypyYzdZ{`W|)_|u}"}55}R}z ~M}Gz<Y kq}@#`{b{8Wbd1@FAXI]-yv34:"\6qKtA%iLUIylT|\B.0QNcNbHl,OeqK-W~F%BFT;MbS^u&-AL[s7h 4d~U& DR~JSU+F@ eCra;v$>vHb &|+` u>Hiu7I1A6PGn,d R"F_2t / ~2@_ORWb,`7#Te:{ joJ)R5(9O}KhXkA(( 3~B{I(VV) 4;6?r~|+E;Gm$;HDlUrx(Akr4 7!sG\v0{d+OPQ Kv|,.M4hU/|XAgEEag:7_og%;_!#=5]WqYA'=S[e%Vu 1<VV G{mEMjQtpJ@9Q]sD,`a,aK`awn_Yd'vQZM#aSu{ 87WNfuu[/XB!GEx{ F!rQQR} ==t$BLo"w~SO3Z[iW}sER(gg;%+4; 0%pju~uzn%5wA;#CNQWn||a4!9# I(2_@yyyyd1c1d1f1gpr@l@p@|@@UnknownG*Ax Times New Roman5Symbol3. *Cx Arial75 Courier;Wingdings?= *Cx Courier New7@CambriaA$BCambria Math"hkrSZGFfqW6qW6!02Q$P`I2!xx 3R notes for BIOL 7083, Community Ecology, Fall 2003 Kyle Harms Kyle E Harms Oh+'0( @L l x  4R notes for BIOL 7083, Community Ecology, Fall 2003 Kyle Harms Normal.dotmKyle E Harms102Microsoft Office Word@&@@-x@w@?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~Root Entry FAData P1TableKgWordDocument>SummaryInformation(DocumentSummaryInformation8CompObjr  F Microsoft Word 97-2003 Document MSWordDocWord.Document.89q