假设我有一个数据帧,并希望使用hist
函数对该数据帧的每一列进行直方图化。另外,假设对于每一列,我想获得不同的主标题。在哪里
主标题可以从列表中获得。
这是我的代码:
> xxxy
V1 V2 V3 V4 V5 V6 V7 V8 V9 V10
1 2.467732 3.453399 2.995019 2.921341 2.913492 3.982306 3.105757 3.485926 2.521138 1.810061
2 2.588249 3.502873 2.989261 2.911928 3.118633 3.905069 2.939321 3.530552 2.505202 1.794859
> as.data.frame(xxxy)
V1 V2 V3 V4 V5 V6 V7 V8 V9 V10
1 2.467732 3.453399 2.995019 2.921341 2.913492 3.982306 3.105757 3.485926 2.521138 1.810061
2 2.588249 3.502873 2.989261 2.911928 3.118633 3.905069 2.939321 3.530552 2.505202 1.794859
#the name of the main title for each histogram plot.
nam <- list("Var1","Var2","Var3","Var4","Var5","Var6","Var7","Var8","Var9","Var10")
然后我想使用hist
对每个变量进行直方图编制。在哪里,我想使用apply
函数获得每个主题的不同主题,如下所示:
> hist(xxxy[[1]],main = paste("Histogram of", nam[[1]])
它的工作基于@RuiBarradas的评论。但是,我想在列表上做。然后我使用这段代码:
> apply(xxxy,2,function(x)hist(x,main=lapply(1:10,function(i)paste("Hist of " ,nam[[i]]))))
它有效,但所有主要标题都是“var1的历史”意味着
main=lapply(1:10,function(i)paste("Hist of " ,nam[[i]]))
不适用于名称列表。
如何使用apply
函数执行此操作。如何自动更改标题。有什么帮助吗?
答案 0 :(得分:0)
试试这个:
sapply(1:ncol(xxxy),
function(t,df,nam){hist(x = df[,t],main=paste("Hist of",nam[[t]]))},xxxy,nam)
答案 1 :(得分:0)
好的,我试一试 首先,我不是使用你的数据集,而是组成一个。原因是你想要绘制直方图,所以我猜你的实际数据有两行以上(每个直方图只有两个值)。
xxxy <- as.data.frame(matrix(runif(1e3), ncol = 10))
names(xxxy) <- paste0('V', 1:10)
现在显示所有内容的代码。请注意,我将它们显示在同一图表中。为此,我使用图形参数mfrow
。然后在绘图完成后,重置原始图形参数。
nam <- names(xxxy)
op <- par(mfrow = c(2, 5))
lapply(seq_along(nam), function(i)
hist(xxxy[[i]],main = paste("Histogram of", nam[[i]]))
)
par(op)
那就是它。我已经在nam
的长度上进行了迭代,并且仅使用一个lapply
进行了迭代,而无需使用嵌套的。{/ p>