R 如何通过两个循环绘制图形

R 如何通过两个循环绘制图形,r,R,虽然这个问题已经“解决”了很多次,但结果总是有另一个问题 在没有打印功能的情况下,它运行时不会出现错误,但使用它,我可以得到以下结果: Error in .subset2(x, i) : recursive indexing failed at level 2 我认为这意味着它不喜欢在两层迭代中创建图形?将方法更改为“qplot(whatever:whatever)”也有完全相同的问题 它的设计是为我看到的每一对变量打印一张图表。它们太多了,无法放在一张单张图片中,比如pairs函数,我需要能

虽然这个问题已经“解决”了很多次,但结果总是有另一个问题

在没有打印功能的情况下,它运行时不会出现错误,但使用它,我可以得到以下结果:

Error in .subset2(x, i) : recursive indexing failed at level 2
我认为这意味着它不喜欢在两层迭代中创建图形?将方法更改为“qplot(whatever:whatever)”也有完全相同的问题

它的设计是为我看到的每一对变量打印一张图表。它们太多了,无法放在一张单张图片中,比如pairs函数,我需要能够看到轴上的实际变量名

load("Transport_Survey.RData")

variables <- select(Transport, "InfOfReceievingWeather", "InfOfReceievingTraffic", "InfOfSeeingTraffic", "InfWeather.Ice", "InfWeather.Rain", "InfWeather.Wind", "InfWeather.Storm", "InfWeather.Snow", "InfWeather.Cold", "InfWeather.Warm", "InfWeather.DarkMorn", "InfWeather.DarkEve", "HomeParking", "WorkParking", "Disability", "Age", "CommuteFlexibility", "Gender", "PassionReduceCongest")
varnames <- list("InfOfReceivingWeather", "InfOfReceivingTraffic", "InfOfSeeingTraffic", "InfWeather.Ice", "InfWeather.Rain", "InfWeather.Wind", "InfWeather.Storm", "InfWeather.Snow", "InfWeather.Cold", "InfWeather.Warm", "InfWeather.DarkMorn", "InfWeather.DarkEve", "HomeParking", "WorkParking", "Disability", "Age", "CommuteFlexibility", "Gender", "PassionReduceCongest")

counterx = 1
countery = 1

for (a in variables) {
  for (b in variables) {
    print(ggplot(variables, mapping=aes(x=variables[[a]], y=variables[[b]],
    xlab=varnames[counterx], ylab=varnames[countery]))+
      geom_point())
    countery = countery+1
  counterx = counterx+1
  }
}

#variables2 <- select(Transport, one_of(InfOfReceivingWeather, InfOfReceivingTraffic, InfOfSeeingTraffic, InfWeather.Ice, InfWeather.Rain, InfWeather.Wind, InfWeather.Storm, InfWeather.Snow, InfWeather.Cold, InfWeather.Warm, InfWeather.DarkMorn, InfWeather.DarkEve, HomeParking, WorkParking, Disability, Age, CommuteFlexibility, Gender, PassionReduceCongest))

您在分配
a
b
时出错。基本上,在
变量
中定义
a
b
时,它们成为
变量
列中包含的值的向量。因此,在您的
aes
映射中,当您调用
variables[[a]]
时,基本上,您正在编写(对于
variables
a
的第一次迭代):
变量[[c(1,1,1,1,4)]
而不是
变量[[infofreceivewingweather]]
。所以,它不能工作

要克服此问题,您必须在以下两种选择中进行选择:

用于(变量中的a){
对于(变量中的b){
打印(ggplot(变量,映射=aes(x=a,y=b))。。。

for(1中的a:ncol(变量)){
对于(1中的b:ncol(变量)){
打印(ggplot(变量,映射=aes(x=变量[[a]],y=变量[[b]]))。。。
尽管第一个选项似乎更简单,但我更喜欢第二个选项,因为它允许您将
a
b
作为列指示符循环使用,以提取
xlab
ylab
变量的colname。
最后,写这样的东西应该会有用:

for(1中的a:ncol(变量)){
对于(1中的b:ncol(变量)){
打印(ggplot(变量,映射=aes(x=变量[[a]],y=变量[[b]]))+
xlab(colnames(变量)[a])+
ylab(colnames(变量)[b])+
几何点()
}
}

它回答了你的问题吗?

你的
变量对象是数据帧还是列表?根据你的代码,它看起来是一个列表(你正在使用
变量[[a]]
)。你能编辑你的问题来添加一个小的吗?(例如,
dput(df[1:10,1:10])
)@dc37 Varnames是一个列表,但变量是一个数据集。至于minature数据集,我将看看我能做些什么。。。
structure(list(InfOfReceievingWeather = c(1, 1, 1, 1, 4), InfOfReceievingTraffic = c(1, 
1, 1, 1, 4), InfOfSeeingTraffic = c(1, 1, 1, 1, 4), InfWeather.Ice = c(3, 
1, 3, 5, 5), InfWeather.Rain = c(1, 1, 2, 2, 4), InfWeather.Wind = c(1, 
1, 2, 2, 4), InfWeather.Storm = c(1, 1, 1, 2, 5), InfWeather.Snow = c(1, 
1, 2, 5, 5), InfWeather.Cold = c(1, 1, 1, 2, 5), InfWeather.Warm = c(1, 
1, 1, 1, 3), InfWeather.DarkMorn = c(1, 1, 1, 1, 1), InfWeather.DarkEve = c(1, 
1, 1, 1, 1), HomeParking = c(1, 1, 3, 1, 1), WorkParking = c(1, 
4, 4, 5, 4), Disability = c(1, 1, 1, 1, 1), Age = c(19, 45, 35, 
40, 58), CommuteFlexibility = c(2, 1, 5, 1, 2), Gender = c(2, 
2, 2, 2, 1), PassionReduceCongest = c(0, 0, 2, 0, 2)), row.names = c(NA, 
-5L), class = c("tbl_df", "tbl", "data.frame"))