我正在尝试使用循环来创建直方图,其中列名引用通过更改列名的字符串而作为循环的结果而更改。我想获得column1
,column2
,column3
,column4
的四个直方图。 (在我的实际示例中,列未命名为第1列,但我希望它清楚)。
For (i in 1:4){
hist( paste("dataset$column" +i ) , main ="title")
}
当我尝试使用粘贴时,我会收到x
必须为数字的错误,但如果我只使用一个作为支票来尝试
hist( dataset$column1), main = "title")
它工作正常,所以它不是数据本身。
答案 0 :(得分:2)
您可以使用apply
set.seed(001)
DF <- data.frame(column1=rnorm(100),
column2=rnorm(100),
column3=rnorm(100),
column4=rnorm(100))
apply(DF, 2, hist) # It produces one hist for each column
使用for
循环
for(i in 1:ncol(DF)){
hist(DF[, paste('column', i, sep='')],
main=paste('Histogram', i))
}
答案 1 :(得分:2)
在这些情况下,我通常使用lapply()
。这是一个例子,我也使用gsub()
来稍微提高名称。
set.seed(001)
DF <- data.frame(Funky.Name.1 = rnorm(100),
Funky.Name.2 = rnorm(100),
Whoo.Whoo = rnorm(100),
Yee.Haw = rnorm(100))
lapply(names(DF),
function(x) hist(DF[, x], main = gsub("\\.", " ", x), xlab="Value"))
par(mfrow = c(2, 2))
这样我们就可以在一个2x2的网格中拼凑四个图。
# par(mfrow = c(2, 2)) # 2x2 layout of all four Histograms
# lapply(names(DF),
# function(x) hist(DF[, x], main = gsub("\\.", " ", x), xlab="Value"))
# When you're done: dev.off()
结果:
答案 2 :(得分:1)
我非常怀疑这个:
hist( dataset$column1), main = "title")
有效 - 你有一个额外的支架。
如果你这样做:
paste("dataset$column" +i )
您将获得一个字符串“dataset $ column1”等。您需要选择所需的列:
for (i in 1:4) {
hist(dataset[,i] , main ="title")
}
选择第1,2,3和1列; 4。
或者你可以:
for (i in 1:4) {
hist(dataset[[paste0("column",i)]] , main ="title")
}
答案 3 :(得分:1)
for
函数未大写。并且“+
”运算符不适用于字符值。并且您不能以您尝试的方式将数字附加到列名称“词干”,但您可以计算“[[
”运算符的参数,这是“$
”运算符的真实含义。这可能会起作用,具体取决于“数据集”的列名是什么:
for (i in 1:4) {
hist( dataset[[ paste0("column", i ) ]] , main ="title")
}