# Create vectors
id <- c("001", "002", "003", "004", "005")
name <- c("superman", "batman", "spiderman", "wolverine", "wonderwoman")
height <- c(190, 188, 178, 150, 183)
weight <- c(102, 95, 76, 88, 59)
gender <- c("Male", "Male", "Male", "Male", "Female")

# Inspect the class of each vector
print(class(name))
## [1] "character"
print(class(height))
## [1] "numeric"
print(class(gender))
## [1] "character"
print(class(id))
## [1] "character"
# Logical vector example
q <- height > 170
print(q)
## [1]  TRUE  TRUE  TRUE FALSE  TRUE
print(class(q))
## [1] "logical"
# Access vector elements
print(name)
## [1] "superman"    "batman"      "spiderman"   "wolverine"   "wonderwoman"
print(name[2])
## [1] "batman"
print(name[3:5])
## [1] "spiderman"   "wolverine"   "wonderwoman"
print(name[-1])
## [1] "batman"      "spiderman"   "wolverine"   "wonderwoman"
print(name[-c(1,3,5)])
## [1] "batman"    "wolverine"
print(height)
## [1] 190 188 178 150 183
print(height[height > 170])
## [1] 190 188 178 183
# Create a data frame
heroes <- data.frame(id, gender, height, weight, name)

# Display the data frame
print(heroes)
##    id gender height weight        name
## 1 001   Male    190    102    superman
## 2 002   Male    188     95      batman
## 3 003   Male    178     76   spiderman
## 4 004   Male    150     88   wolverine
## 5 005 Female    183     59 wonderwoman
# Save the data frame to an .RData file
save(heroes, file = "heroes.RData")

# Clear the workspace and reload the data frame
rm(list = ls())
load("heroes.RData")

# Access data frame elements
print(heroes[2, ])
##    id gender height weight   name
## 2 002   Male    188     95 batman
print(heroes[, 2])
## [1] "Male"   "Male"   "Male"   "Male"   "Female"
print(heroes[5, ])
##    id gender height weight        name
## 5 005 Female    183     59 wonderwoman
print(heroes[3, 4])
## [1] 76
print(heroes[["name"]])
## [1] "superman"    "batman"      "spiderman"   "wolverine"   "wonderwoman"
print(heroes$name)
## [1] "superman"    "batman"      "spiderman"   "wolverine"   "wonderwoman"
print(heroes$height)
## [1] 190 188 178 150 183
print(mean(heroes$height))
## [1] 177.8
print(heroes[1:3, ])
##    id gender height weight      name
## 1 001   Male    190    102  superman
## 2 002   Male    188     95    batman
## 3 003   Male    178     76 spiderman
print(heroes[heroes$name == "spiderman", ])
##    id gender height weight      name
## 3 003   Male    178     76 spiderman
print(heroes[heroes$name != "spiderman", ])
##    id gender height weight        name
## 1 001   Male    190    102    superman
## 2 002   Male    188     95      batman
## 4 004   Male    150     88   wolverine
## 5 005 Female    183     59 wonderwoman
print(heroes[heroes$height > 180, ])
##    id gender height weight        name
## 1 001   Male    190    102    superman
## 2 002   Male    188     95      batman
## 5 005 Female    183     59 wonderwoman
print(sort(heroes$height))
## [1] 150 178 183 188 190
print(sort(heroes$height, decreasing = TRUE))
## [1] 190 188 183 178 150
# Basic bar plot
barplot(sort(heroes$height, decreasing = TRUE))

# Customized bar plot
barplot(
  sort(heroes$height, decreasing = TRUE),
  main = "Heroes",
  sub = "by Peter Liu",
  names.arg = c("superman", "batman", "spiderman", "wonderwoman", "wolverine"),
  xlab = "Name",
  ylab = "Height",
  col = c(1:5)
)

# Create data
nation <- c("Korea", "Taiwan", "Hong Kong", "Singapore")
growth <- c(0.36, 0.28, 0.83, 1.40)
data <- data.frame(nation = nation, growth = growth)

# Sort data by growth
sorted_data <- data[order(-data$growth), ]

# Bar plot for Asian Tigers
barplot(
  sorted_data$growth,
  main = "亞洲四小龍經濟成長率",
  sub = "by ANNIEY",
  names.arg = sorted_data$nation,
  xlab = "Nation",
  ylab = "Growth",
  col = c("pink", "skyblue", "gray", "purple"),
  ylim = c(0, max(sorted_data$growth) + 0.5)
)

# Load and inspect the iris dataset
df <- iris
print(head(df))
##   Sepal.Length Sepal.Width Petal.Length Petal.Width Species
## 1          5.1         3.5          1.4         0.2  setosa
## 2          4.9         3.0          1.4         0.2  setosa
## 3          4.7         3.2          1.3         0.2  setosa
## 4          4.6         3.1          1.5         0.2  setosa
## 5          5.0         3.6          1.4         0.2  setosa
## 6          5.4         3.9          1.7         0.4  setosa
print(str(df))
## 'data.frame':    150 obs. of  5 variables:
##  $ Sepal.Length: num  5.1 4.9 4.7 4.6 5 5.4 4.6 5 4.4 4.9 ...
##  $ Sepal.Width : num  3.5 3 3.2 3.1 3.6 3.9 3.4 3.4 2.9 3.1 ...
##  $ Petal.Length: num  1.4 1.4 1.3 1.5 1.4 1.7 1.4 1.5 1.4 1.5 ...
##  $ Petal.Width : num  0.2 0.2 0.2 0.2 0.2 0.4 0.3 0.2 0.2 0.1 ...
##  $ Species     : Factor w/ 3 levels "setosa","versicolor",..: 1 1 1 1 1 1 1 1 1 1 ...
## NULL
print(summary(df))
##   Sepal.Length    Sepal.Width     Petal.Length    Petal.Width   
##  Min.   :4.300   Min.   :2.000   Min.   :1.000   Min.   :0.100  
##  1st Qu.:5.100   1st Qu.:2.800   1st Qu.:1.600   1st Qu.:0.300  
##  Median :5.800   Median :3.000   Median :4.350   Median :1.300  
##  Mean   :5.843   Mean   :3.057   Mean   :3.758   Mean   :1.199  
##  3rd Qu.:6.400   3rd Qu.:3.300   3rd Qu.:5.100   3rd Qu.:1.800  
##  Max.   :7.900   Max.   :4.400   Max.   :6.900   Max.   :2.500  
##        Species  
##  setosa    :50  
##  versicolor:50  
##  virginica :50  
##                 
##                 
## 
print(names(df))
## [1] "Sepal.Length" "Sepal.Width"  "Petal.Length" "Petal.Width"  "Species"
print(df[1:10, 3])
##  [1] 1.4 1.4 1.3 1.5 1.4 1.7 1.4 1.5 1.4 1.5
print(df$Species)
##   [1] setosa     setosa     setosa     setosa     setosa     setosa    
##   [7] setosa     setosa     setosa     setosa     setosa     setosa    
##  [13] setosa     setosa     setosa     setosa     setosa     setosa    
##  [19] setosa     setosa     setosa     setosa     setosa     setosa    
##  [25] setosa     setosa     setosa     setosa     setosa     setosa    
##  [31] setosa     setosa     setosa     setosa     setosa     setosa    
##  [37] setosa     setosa     setosa     setosa     setosa     setosa    
##  [43] setosa     setosa     setosa     setosa     setosa     setosa    
##  [49] setosa     setosa     versicolor versicolor versicolor versicolor
##  [55] versicolor versicolor versicolor versicolor versicolor versicolor
##  [61] versicolor versicolor versicolor versicolor versicolor versicolor
##  [67] versicolor versicolor versicolor versicolor versicolor versicolor
##  [73] versicolor versicolor versicolor versicolor versicolor versicolor
##  [79] versicolor versicolor versicolor versicolor versicolor versicolor
##  [85] versicolor versicolor versicolor versicolor versicolor versicolor
##  [91] versicolor versicolor versicolor versicolor versicolor versicolor
##  [97] versicolor versicolor versicolor versicolor virginica  virginica 
## [103] virginica  virginica  virginica  virginica  virginica  virginica 
## [109] virginica  virginica  virginica  virginica  virginica  virginica 
## [115] virginica  virginica  virginica  virginica  virginica  virginica 
## [121] virginica  virginica  virginica  virginica  virginica  virginica 
## [127] virginica  virginica  virginica  virginica  virginica  virginica 
## [133] virginica  virginica  virginica  virginica  virginica  virginica 
## [139] virginica  virginica  virginica  virginica  virginica  virginica 
## [145] virginica  virginica  virginica  virginica  virginica  virginica 
## Levels: setosa versicolor virginica
# Modify column names
names(df) <- c("花萼長", "花萼寬", "花瓣長", "花瓣寬", "品種")

# Filter data
print(df[df$花萼長 >= 7, ])
##     花萼長 花萼寬 花瓣長 花瓣寬       品種
## 51     7.0    3.2    4.7    1.4 versicolor
## 103    7.1    3.0    5.9    2.1  virginica
## 106    7.6    3.0    6.6    2.1  virginica
## 108    7.3    2.9    6.3    1.8  virginica
## 110    7.2    3.6    6.1    2.5  virginica
## 118    7.7    3.8    6.7    2.2  virginica
## 119    7.7    2.6    6.9    2.3  virginica
## 123    7.7    2.8    6.7    2.0  virginica
## 126    7.2    3.2    6.0    1.8  virginica
## 130    7.2    3.0    5.8    1.6  virginica
## 131    7.4    2.8    6.1    1.9  virginica
## 132    7.9    3.8    6.4    2.0  virginica
## 136    7.7    3.0    6.1    2.3  virginica
print(nrow(df[df$花萼長 >= 7, ]))
## [1] 13
print(df[df$品種 == "setosa", ])
##    花萼長 花萼寬 花瓣長 花瓣寬   品種
## 1     5.1    3.5    1.4    0.2 setosa
## 2     4.9    3.0    1.4    0.2 setosa
## 3     4.7    3.2    1.3    0.2 setosa
## 4     4.6    3.1    1.5    0.2 setosa
## 5     5.0    3.6    1.4    0.2 setosa
## 6     5.4    3.9    1.7    0.4 setosa
## 7     4.6    3.4    1.4    0.3 setosa
## 8     5.0    3.4    1.5    0.2 setosa
## 9     4.4    2.9    1.4    0.2 setosa
## 10    4.9    3.1    1.5    0.1 setosa
## 11    5.4    3.7    1.5    0.2 setosa
## 12    4.8    3.4    1.6    0.2 setosa
## 13    4.8    3.0    1.4    0.1 setosa
## 14    4.3    3.0    1.1    0.1 setosa
## 15    5.8    4.0    1.2    0.2 setosa
## 16    5.7    4.4    1.5    0.4 setosa
## 17    5.4    3.9    1.3    0.4 setosa
## 18    5.1    3.5    1.4    0.3 setosa
## 19    5.7    3.8    1.7    0.3 setosa
## 20    5.1    3.8    1.5    0.3 setosa
## 21    5.4    3.4    1.7    0.2 setosa
## 22    5.1    3.7    1.5    0.4 setosa
## 23    4.6    3.6    1.0    0.2 setosa
## 24    5.1    3.3    1.7    0.5 setosa
## 25    4.8    3.4    1.9    0.2 setosa
## 26    5.0    3.0    1.6    0.2 setosa
## 27    5.0    3.4    1.6    0.4 setosa
## 28    5.2    3.5    1.5    0.2 setosa
## 29    5.2    3.4    1.4    0.2 setosa
## 30    4.7    3.2    1.6    0.2 setosa
## 31    4.8    3.1    1.6    0.2 setosa
## 32    5.4    3.4    1.5    0.4 setosa
## 33    5.2    4.1    1.5    0.1 setosa
## 34    5.5    4.2    1.4    0.2 setosa
## 35    4.9    3.1    1.5    0.2 setosa
## 36    5.0    3.2    1.2    0.2 setosa
## 37    5.5    3.5    1.3    0.2 setosa
## 38    4.9    3.6    1.4    0.1 setosa
## 39    4.4    3.0    1.3    0.2 setosa
## 40    5.1    3.4    1.5    0.2 setosa
## 41    5.0    3.5    1.3    0.3 setosa
## 42    4.5    2.3    1.3    0.3 setosa
## 43    4.4    3.2    1.3    0.2 setosa
## 44    5.0    3.5    1.6    0.6 setosa
## 45    5.1    3.8    1.9    0.4 setosa
## 46    4.8    3.0    1.4    0.3 setosa
## 47    5.1    3.8    1.6    0.2 setosa
## 48    4.6    3.2    1.4    0.2 setosa
## 49    5.3    3.7    1.5    0.2 setosa
## 50    5.0    3.3    1.4    0.2 setosa
df_setosa <- df[df$品種 == "setosa", ]

# Save filtered data
save(df_setosa, file = "df_setosa.RData")

# Attempt to load the file
if (file.exists("heroes_stats.RData")) {
  load("heroes_stats.RData")
  
  # Inspect the data
  print(head(heroes_stats))
  print(str(heroes_stats))
  print(summary(heroes_stats))
  print(names(heroes_stats))
  print(heroes_stats[1:5, c(1, 2, 9)])
  print(heroes_stats$Alignment)
  print(heroes_stats[heroes_stats$Power >= 95, ])
  print(nrow(heroes_stats[heroes_stats$Power > 95, ]))
  print(heroes_stats$Alignment)
  print(heroes_stats[heroes_stats$Alignment == "good", ])
  heroes_good <- heroes_stats[heroes_stats$Alignment == "good", ]
  save(heroes_good, file = "heroes_good.RData")
  print(subset(heroes_stats, grepl("man", Name)))
  
  # Bar plot of selected heroes
  superheroes <- c("iceman", "deadman", "aquaman", "batman", "darkman")
  total_ability <- c(100, 100, 65, 37, 12)
  barplot(
    total_ability,
    main = "超級英雄綜合能力",
    sub = "by ANNIEY",
    names.arg = superheroes,
    xlab = "超級英雄",
    ylab = "綜合能力值",
    col = c("pink", "skyblue", "gray", "purple", "red")
  )
} else {
  print("The file 'heroes_stats.RData' does not exist.")
}
## [1] "The file 'heroes_stats.RData' does not exist."