首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在循环中使用prop.table时从列表引用变量名

在循环中使用prop.table时从列表引用变量名
EN

Stack Overflow用户
提问于 2018-06-05 03:27:35
回答 1查看 165关注 0票数 0

我正在尝试使用R中的for循环从列联表快速生成几个ggplot2图。每个变量(R1...R7)由单个变量(segment_r)分割。

我编写了以下循环,但不断收到错误。

代码语言:javascript
复制
question_names<-paste("R",1:7,sep='') # Create list with question names

attach(df)
for (i in length(question_names)) {
  question_names[i]<-factor(question_names[i])
  means<-prop.table(table(get(question_names[i]),segment_r),2)*100
  means.long<-melt(means,id.vars="segment_r")
  p<-ggplot(means.long,aes(x=Var1,y=value,fill=factor(Var2)))+
    geom_bar(stat="identity",position="dodge")+coord_flip()+
    scale_fill_discrete(name="Segment",
                        breaks=c(1:4),
                        labels=c(1:4))+
    xlab("")+ylab("Mean Percentage")
  p <- p + facet_wrap( ~ Var2, ncol=4)
  p
  }
detach(df)

我尝试在table中包含get,这会产生错误:Error in get(question_names[i]) : object '1' not found)。然而,省略get也是行不通的:Error in table(question_names[i], segment_r) : all arguments must have the same length

有什么想法?我也对一种不使用loop就能生成多个图形的解决方案持开放态度--在这里追求速度。

对于每个请求,示例数据如下:

代码语言:javascript
复制
df <- read.csv(text="R1, R2, R3, R4, R5, R6, R7, segment_r
Apples, Fruit salad, Pasta, Mexican, Apples, Cheese, Salad, Segment 1
Apples, Fruit salad, Pasta, Mexican, Apples, Cheese, Salad, Segment 1
Oranges, Fruit salad, Pasta, Mexican, Oranges, Cheese, Salad, Segment 1
Oranges, Fruit salad, Pasta, Mexican, Oranges, Cheese, Salad, Segment 1
Oranges, Fruit salad, Pasta, Thai, Oranges, Cheese, Salad, Segment 1
Oranges, Fruit salad, Pasta, Thai, Oranges, Cheese, Salad, Segment 1
Oranges, Fruit salad, Pasta, Thai, Oranges, Cheese, Salad, Segment 2
Oranges, Ice cream, Pasta, Thai, Oranges, Milk, Salad, Segment 2
Bananas, Ice cream, Pasta, Thai, Bananas, Milk, Salad, Segment 2
Bananas, Ice cream, Pasta, Chinese, Bananas, Milk, Salad, Segment 2
Bananas, Ice cream, Pasta, Chinese, Bananas, Milk, Salad, Segment 2
Bananas, Pie, Pasta, Chinese, Bananas, Milk, Side, Segment 2
Bananas, Pie, Pasta, Chinese, Bananas, Milk, Side, Segment 2
Bananas, Pie, Pizza, Chinese, Bananas, Milk, Side, Segment 3
Bananas, Pie, Pizza, Chinese, Bananas, Milk, Side, Segment 3
Apples, Fruit salad, Pasta, Mexican, Apples, Milk, Side, Segment 4
Apples, Fruit salad, Pasta, Mexican, Apples, Milk, Side, Segment 4
Oranges, Fruit salad, Pasta, Mexican, Oranges, Milk, Side, Segment 4
Oranges, Fruit salad, Pasta, Mexican, Oranges, None, Side, Segment 4
Oranges, Fruit salad, Pasta, Thai, Oranges, None, Side, Segment 1
Oranges, Fruit salad, Pasta, Thai, Oranges, None, Side, Segment 1
Oranges, Fruit salad ,Pasta, Thai, Oranges, None, Side, Segment 2
Oranges, Ice cream, Pasta, Thai, Oranges, None, Side, Segment 2
Bananas, Ice cream, Pasta, Thai, Bananas, None, Side, Segment 2
Bananas, Ice cream, Pasta, Chinese, Bananas, None, Fries, Segment 2
Bananas, Ice cream, Pasta, Chinese, Bananas, None, Fries, Segment 2
Bananas, Pie, Pasta, Chinese, Bananas, None, Fries, Segment 2
Bananas, Pie, Pasta, Chinese, Bananas, None, Fries, Segment 2
Bananas, Pie, Pizza, Chinese, Bananas, None, Fries, Segment 3
Bananas, Pie, Pizza, Chinese, Bananas, None, Fries, Segment 3")
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-05 04:11:41

我不清楚你到底想用这些情节“做什么”。但是把你的代码翻译成“能用”的代码可能是这样的

代码语言:javascript
复制
library(reshape2)
library(ggplot2)

question_names <- paste("R", 1:7, sep='') # Create list with question names

for (q in question_names) {
  means <- prop.table(table(df[[q]], df[["segment_r"]]),2)*100
  means.long <- melt(means, id.vars="segment_r")
  p <- ggplot(means.long, aes(x=Var1, y=value, fill=factor(Var2)))+
    geom_bar(stat="identity",position="dodge") + coord_flip()+
    scale_fill_discrete(name="Segment",
                        breaks=c(1:4),
                        labels=c(1:4))+
    xlab("")+ylab("Mean Percentage")
  p <- p + facet_wrap( ~ Var2, ncol=4)
  print(p)
}

这将把所有的绘图放到图形窗口中(尽管最后一个绘图覆盖了前一个绘图)。但这至少摆脱了attach()get()

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50687515

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档