在R中“赋值”函数后绘图

时间:2016-03-09 14:44:29

标签: r data-visualization dataset

我的任务是为每棵树创建5个地块(年龄与高度),按栖息地划分 类型。

这是我的代码:

par(mfrow = c(3,2))
data_x <- split(treeg,treeg$habitat)
new_names <- c('one','two','three','four','five')
for(i in 1:length(data_x)){
    assign(paste(new_names[i]),data_x[[i]])
}

在这里,我将数据框“treeg”(由5个变量组成:ID,森林,栖息地,dbh.in,height.ft,年龄)拆分为“栖息地”。然后我创建了5个separeted data_frames,其名称为“one”,“two”,......等

所以我有两个问题: 1)如何访问我创建的新数据框?我的意思是,要获得用于绘图的访问权限:

for(i in 1:length(data_x)){
    assign(paste(new_names[i]),data_x[[i]])
    plot(created_dataframe$height.ft,created_dataframe$age,type = 'l')

2)有没有更有效的方法来解决我的问题?

P.S数据集 treeg&lt; - read.csv(“http://www.ms.unimelb.edu.au/~odj/Teaching/MAST30025/data/treegrowth.csv”)

1 个答案:

答案 0 :(得分:0)

如果将变量名称存储为字符,则可以使用get()来获取变量的内容。因此,您可以将代码更改为以下内容以创建绘图:

treeg <- read.table("Downloads/treegrowth.csv", header = TRUE, sep = ",")
par(mfrow = c(3,2), mar = c(4.2, 4.2, 1, 1))
data_x <- split(treeg,treeg$habitat)
new_names <- c('one','two','three','four','five')

for(i in 1:length(data_x)){
  assign(new_names[i],data_x[[i]])
  created_dataframe <- get(new_names[i])
  plot(created_dataframe$height.ft, created_dataframe$age, type = 'l')
}

我已将参数mar添加到par(),因为默认边距非常大且图表非常小。您不必使用paste(),我将其删除。使用get()数据框存储在created_dataframe中,并在下面的绘图命令中使用。

但是,这不是最好的方法。实际上不需要以新名称存储数据帧。将数据框保留在列表(data_x)中要方便得多,因为这允许您通过索引访问它们,并且您既不需要assign()也不需要get()。所以这也将产生情节:

treeg <- read.table("Downloads/treegrowth.csv", header = TRUE, sep = ",")
par(mfrow = c(3,2), mar = c(4.2, 4.2, 1, 1))
data_x <- split(treeg,treeg$habitat)

for(i in 1:length(data_x)){
  plot(data_x[[i]]$height.ft, data_x[[i]]$age, type = 'l')
}

如果需要,您还可以将for - 循环替换为lapply()

lapply(data_x, function(x) plot(x$height.ft, x$age, type = 'l'))

这是情节:

enter image description here