我想使用sapply()在我的数据框中的每个变量中生成qqnorm图。这是我到目前为止所得到的:
myfun=function(x) {
c(qqnorm(x),
qqline(x)
)
}
sapply(mydata, myfun)
但是,我希望每个绘图在绘图的标题中都有相应的变量名称。这是怎么做到的?
Thanx很多; - )
答案 0 :(得分:1)
在这种情况下l_ply
更合适,因为您只需要绘图,因此不需要输出。根据@Henrik的回答,我们有
require(plyr)
myfun <- function(x, data, ...) {
c(qqnorm(data[[x]], main = names(data)[x], ...),
qqline(data[[x]])
)
}
l_ply(seq_len(ncol(swiss)), myfun, data = swiss)
修改强>
如果你想看到你的图表,你有很多选择,其中之一是划分绘图设备并在设备的一个部分绘制每个qqplot。
par(mfrow = c(3, 2))
l_ply(seq_len(ncol(swiss)), myfun, data = swiss)
答案 1 :(得分:0)
问题在于,当您这样做时,names
不会传递给函数,而只会传递给未命名的列表元素。您需要稍微更改函数并只需移交索引然后处理整个对象(即隐式执行for循环和使用迭代器):
data(swiss)
myfun=function(x, data) {
c(qqnorm(data[[x]], main = colnames(data)[x]),
qqline(data[[x]])
)
}
lapply(1:ncol(swiss), myfun, data = swiss)
此外,我将功能更改为lapply
并使用swiss
数据集作为示例。
答案 2 :(得分:0)
这是一个for
循环,它是最合适的循环结构。
for (i in seq_along(swiss)) {
qqnorm(swiss[,i], main = names(swiss)[i])
qqline(swiss[,i])
Sys.sleep(3) #to see something and avoid problems in RStudio
}