字符串转换-用于分类变量的For循环

时间:2018-12-17 06:22:12

标签: r for-loop

您好,我是R的新手,感谢您对本案的提示。 我一直在努力将dataframe中的变量(对象)转换为string并使用for循环绘制它们,如下所述。

COUNTRY: China Belgium ...
COMPANY: XXX Inc. YYY Inc. ...

此处,COUNTRY和COMPANY是类别变量。

我已经使用toString()as.character()来将变量名转换为string,所以我可以指定图名,但似乎无法使用它。我需要4个变量,如以下代码中for循环中所列,有2个目的:

  • 作为用于命名情节的字符串
  • 用于barplot()

,但是字符串转换和for循环均无法正常运行。 有人可以为此目的用适当的命令协助我吗? 非常感谢您的帮助... 问候

代码

Frequency_COUNTRY <- table(COUNTRY)#Get Frequency for COUNTRY 
Relative_Frequency_COUNTRY <- table(COUNTRY) / length(COUNTRY)#Get Relative 
#Frequency (Percentage %) for Variable COUNTRY
Frequency_COMPANY <- table(COMPANY) #Get Frequency and Relative Frequency for COMPANY
Relative_Frequency_COMPANY <- table(COMPANY) / length(COMPANY)
Categorical_Variable_List = c(Frequency_COUNTRY,
                        Relative_Frequency_COUNTRY ,
                        Frequency_COMPANY,
                        Relative_Frequency_COMPANY)`# Get list of 4 variables above
for (Categorical_Variable in Categorical_Variable_List){#Plot 4 variables using a for loop
     A = toString(Categorical_Variable) #Trying to convert non-string variable name to string
plotName <- paste("BarChart_", A, sep = "_")# Specify plot name, e.g. BarChart_Frequency_COUNTRY
png(file = plotName)#Create png file 
barplot(Categorical_Variable) #use barplot() to make graph
dev.off()`# Switch off dev
}   

1 个答案:

答案 0 :(得分:0)

您的代码将Categorical_Variable_List当作是类别变量的命名列表。两者都不是。

以下代码纠正了这些错误,并绘制了4个条形图的图形。在代码中,删除对par的两个调用,一个在for循环之前,另一个在循环之后。

我将组成一个数据集,以测试代码。

set.seed(1234)

n <- 20
COUNTRY <- sample(LETTERS[1:5], n, TRUE)
COMPANY <- sample(letters[1:4], n, TRUE)

Frequency_COUNTRY <- table(COUNTRY)    # Get Frequency for COUNTRY 
Relative_Frequency_COUNTRY <- table(COUNTRY) / length(COUNTRY)#Get Relative 
# Frequency (Percentage %) for Variable COUNTRY
Frequency_COMPANY <- table(COMPANY)    # Get Frequency and Relative Frequency for COMPANY
Relative_Frequency_COMPANY <- table(COMPANY) / length(COMPANY)

Variable_List <- list(Frequency_COUNTRY = Frequency_COUNTRY,
                      Relative_Frequency_COUNTRY = Relative_Frequency_COUNTRY,
                      Frequency_COMPANY = Frequency_COMPANY,
                      Relative_Frequency_COMPANY = Relative_Frequency_COMPANY) # Get list of 4 variables above
Variable_Name <- names(Variable_List)

old_par <- par(mfrow = c(2, 2))
for (i in seq_along(Variable_List)){                  # Plot 4 variables using a for loop
  plotName <- paste("BarChart", Variable_Name[[i]], sep = "_") # Specify plot name

  print(plotName)                                     # for debugging only

  #png(file = plotName)                               # Create png file 
  barplot(Variable_List[[i]])                         # use barplot() to make graph
  #dev.off()                                          # Switch off dev
}
par(old_par)

enter image description here