我的任务是为每棵树创建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”)
答案 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'))
这是情节: