你看这个代码他又臭又长,就不能写好看点吗

举个例子

用R内置数据集iris来做图

plot(iris$Sepal.Length,
     iris$Sepal.Width,
     col=iris$Species)

你看这个代码他又臭又长,就不能写好看点吗_第1张图片


boxplot(iris$Sepal.Length~iris$Species)

你看这个代码他又臭又长,就不能写好看点吗_第2张图片

可以看到,引用iris列名时必须要多写一遍数据框的名字,这样的代码不美观。

如果去掉数据框名,单独写列名,则会报错:

plot(Sepal.Length,
     Sepal.Width,
     col=Species)
#> Error in plot(Sepal.Length, Sepal.Width, col = Species): object 'Sepal.Length' not found
boxplot(Sepal.Length~Species)
#> Error in eval(predvars, data, env): object 'Sepal.Length' not found

有两个办法可以简化:

方法一、用with()

在with()内部,列名是可以单独引用的“局部变量”,需要注意,在with()内部用=<-赋值的变量也是局部变量,出了with()就不可用,需要使用<<-符号,才能成为全局变量,即出了with()可用。

colnames(iris)
#> [1] "Sepal.Length" "Sepal.Width"  "Petal.Length" "Petal.Width" 
#> [5] "Species"

with(iris,{
  boxplot(Sepal.Length~Species)
  x <- summary(Sepal.Length)
  y <- summary(Sepal.Length)
  z <<- summary(Sepal.Length)
})

你看这个代码他又臭又长,就不能写好看点吗_第3张图片

x
#> Error in eval(expr, envir, enclos): object 'x' not found
y
#> Error in eval(expr, envir, enclos): object 'y' not found
z
#>    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
#>   4.300   5.100   5.800   5.843   6.400   7.900

方法二、attach()

将iris的每一列都变成单独的向量名。

attach(iris)
boxplot(Sepal.Length~Species,border=c("blue","red","pink"))

你看这个代码他又臭又长,就不能写好看点吗_第4张图片

detach(iris)

需要注意,两个数据框列名有冲突的时候,同时attach会出错。

你可能感兴趣的:(你看这个代码他又臭又长,就不能写好看点吗)