R语言工作空间值得就是交互框,之前我们已经简单介绍过那个交互框的功能。在这里我们详细地梳理一下:

运行代码

毫无疑问,你可以直接输入,复制,粘贴代码到交互框来进行运行,比如输出一个Hello World!

print("Hello World")

 

值得注意的是,R函数括号必须是英文字符,不能是中文的。所以“()”(英文括号)和“()“(中文括号)不是一回事儿。

作图

我们输入一行简单的做图代码:

plot(density(rnorm(1000,0,1)))

在右下角就会出现一副正态分布的曲线图像。再上面的代码里,我们首先生成了一组数据,用的是命令rnorm(1000,0,1),这一行命令可以基于均值0和标准差1生成1000个数据点。然后我们再这一行名另外,包裹了一层函数,density(),这是一个用来计算数据的分布的函数。然后我们调用函数plot(),来将这一曲线绘制出来。

查看函数说明

R语言的每一个函数都必须有说明,这是再R包上线发布之前硬性要求的,这样做的好处就是,每一个函数都会有一个相应地说明文档。在我们不知道一个函数怎么用的时候,就可以查看说明文档。调用说明文档的方法很简单,就是再函数前面加一个问好?:

?density

 

用上边的代码,我们就可以知道plot这个函数的功能、用法等等信息。 

右下角,出现了有关于这个函数的说明文档。伴随着R包升级换代,说明文档是会发生变化的。这也是R语言的一个不足,经常你写的R包引用了别人的包,然后别人的R包更新了,导致你的程序也跟着出问题。

总而言之,无论什么时候,你搞不清一个函数是做什么的,就可以用这个方法去查询。(当然百度也是好办法)

查看源代码

R语言可以很方便地让你查看每一个函数的源代码,其实严格来说,其原因是每一个函数都是一系列复制给了一个变量,你只不过是查看了这个变量而已。不过这确实让人们可以很轻易地查看R里的函数源代码。

比如说,我们想要查看lm这个函数的源代码,只需要直接输入lm,不加括号就可以实现:

> lm
function (formula, data, subset, weights, na.action, method = "qr", 
    model = TRUE, x = FALSE, y = FALSE, qr = TRUE, singular.ok = TRUE, 
    contrasts = NULL, offset, ...) 
{
    ret.x <- x
    ret.y <- y
    cl <- match.call()
    mf <- match.call(expand.dots = FALSE)
    m <- match(c("formula", "data", "subset", "weights", "na.action", 
        "offset"), names(mf), 0L)
    mf <- mf[c(1L, m)]
    mf$drop.unused.levels <- TRUE
    mf[[1L]] <- quote(stats::model.frame)
    mf <- eval(mf, parent.frame())
    if (method == "model.frame") 
        return(mf)
    else if (method != "qr") 
        warning(gettextf("method = '%s' is not supported. Using 'qr'", 
            method), domain = NA)
    mt <- attr(mf, "terms")
    y <- model.response(mf, "numeric")
    w <- as.vector(model.weights(mf))
    if (!is.null(w) && !is.numeric(w)) 
        stop("'weights' must be a numeric vector")
    offset <- as.vector(model.offset(mf))
    if (!is.null(offset)) {
        if (length(offset) != NROW(y)) 
            stop(gettextf("number of offsets is %d, should equal %d (number of observations)", 
                length(offset), NROW(y)), domain = NA)
    }
    if (is.empty.model(mt)) {
        x <- NULL
        z <- list(coefficients = if (is.matrix(y)) matrix(, 0, 
            3) else numeric(), residuals = y, fitted.values = 0 * 
            y, weights = w, rank = 0L, df.residual = if (!is.null(w)) sum(w != 
            0) else if (is.matrix(y)) nrow(y) else length(y))
        if (!is.null(offset)) {
            z$fitted.values <- offset
            z$residuals <- y - offset
        }
    }
    else {
        x <- model.matrix(mt, mf, contrasts)
        z <- if (is.null(w)) 
            lm.fit(x, y, offset = offset, singular.ok = singular.ok, 
                ...)
        else lm.wfit(x, y, w, offset = offset, singular.ok = singular.ok, 
            ...)
    }
    class(z) <- c(if (is.matrix(y)) "mlm", "lm")
    z$na.action <- attr(mf, "na.action")
    z$offset <- offset
    z$contrasts <- attr(x, "contrasts")
    z$xlevels <- .getXlevels(mt, mf)
    z$call <- cl
    z$terms <- mt
    if (model) 
        z$model <- mf
    if (ret.x) 
        z$x <- x
    if (ret.y) 
        z$y <- y
    if (!qr) 
        z$qr <- NULL
    z
}
<bytecode: 0x000000000605d848>
<environment: namespace:stats>
> 

运行脚本

再很多时候,你不想每一次跑程序都很重新些,也不想要复制粘贴。所以可以写成R脚本的形式,然后直接运行。R脚本就是普通的文件,只需要再命名文件的时候,结尾用.R来结尾就行了。运行R脚本的方式有很多,不过最常用的大概有两种,一个与交互框有关——通过source()命令运行,另一种是直接再bash命令中调用Rscript运行。

区别在于,前一种运行完了,所有结果都会被保存下来再交互框中。而后一个什么也不会留下。

下面假设我们写了一个小的R脚本,命名为a.R: 

点击以后,左上方的区域就会变成写脚本的地方,然后脚本内容如下:

# Test Script by Yuan Tian
data(iris)
summary(iris)
boxplot(iris[,1:4])
plot(hclust(dist((iris[,1:4]))))

保存的时候,RSutdio会提示你保存的位置,我建议就在默认目录。

然后再下方的console框,我们输入source("./TestScript.R")就可以运行这个脚本: 


其实我们输出了两幅图,但是右边只能看到一副,因为前一副被盖掉了。如果程序有错,source运行的时候,会报错的。

基本上上述就是R交互框的使用方法,这是R语言中最重要也是最常用的工具。