如何从列表中选择主标题的正确名称?

时间:2017-09-03 11:50:00

标签: r

假设我有一个数据帧,并希望使用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函数执行此操作。如何自动更改标题。有什么帮助吗?

2 个答案:

答案 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>