我有一个流程,我希望一次循环一个变量。
虽然我的流程要复杂得多,但我使用下面的内容来说明基本问题。
假设我想构建一个直方图,并为iris
中的每个变量做很多其他的事情。以下内容实现了这一目标:
hist(iris$Sepal.Length, main = paste("Histogram of Sepal.Length"))
hist(iris$Sepal.Width, main = paste("Histogram of Sepal.Width"))
hist(iris$Petal.Length, main = paste("Histogram of Petal.Length"))
hist(iris$Petal.Width, main = paste("Histogram of Petal.Width"))
但是,我的数据框要大得多,而且我的过程要复杂得多。我想把它包裹在如下的循环中(这不起作用,但是我想象的是我的想法)。
name.list <- names(iris)
for (i in 1:4) {
print(i)
print(name.list[i])
print(paste0('iris$', name.list[i]))
hist(paste0('iris$', name.list[i]), main = paste("Histogram of ", name.list[i]))
# A bunch of other stuff I need to do with this variable
# ...
# ...
}
我在这里缺少什么?如何将此代码包装成一次循环一个?
答案 0 :(得分:3)
如果将data.frame视为列表,则会更容易。类data.frame
的对象是一个列表,因此您可以在此处使用列表选择[[
:
for( i in names(iris)){
tmp <- iris[[i]]
if(is.numeric(tmp))
hist(tmp, main = paste("Histogram of",i))
}
另请参阅此问题的答案:Pass a data.frame column name to a function