R: добавить заголовки к точкам рассеяния из цикла for - PullRequest
0 голосов
/ 16 ноября 2018

Я довольно новичок в R и не могу решить следующую проблему:

У меня есть фрейм данных с разными переменными (= столбцы), которые являются либо предикторами, либо целевыми объектами.Я хочу посмотреть на диаграммы рассеяния между каждым предиктором и каждой целью (по вычислительным соображениям я не хочу смотреть на все графики рассеяния).Я написал вложенный цикл for для создания графиков рассеяния, который хорошо работает.Однако я не могу добавить заголовок к точкам рассеяния, указывающий на две взаимосвязанные функции.

Я написал простой пример:

#create dataframe
f1 = rnorm(100)
f2 = rnorm(100)
f3 = rnorm(100)
t1 = rnorm(100)
t2 = rnorm(100)
mydata = data.frame(f1, f2, f3, t1, t2)

#defining targets & features by vectors
targets <- c("t1", "t2")
features <- c("f1", "f2", "f3")

#wrong solution
for (i in mydata[,features]){
 for (j in mydata[,targets]){
  plot= plot(i, j, main = paste(names(mydata)[i], "vs", names(mydata)[j]))
}}

Это, очевидно, не работает.

Кто-нибудь знает, что я делаю не так?В идеале я хотел бы добавить имена обеих переменных к каждому графику рассеяния и к соответствующей оси.

Ответы [ 2 ]

0 голосов
/ 16 ноября 2018

Прежде всего, если вы можете, пожалуйста, включите ваш минимальный воспроизводимый пример в блок кода, чтобы людям было проще ответить, смогут ли они скопировать и вставить ваш код.

Основываясь на вашем примере,names(mydata[i]) не работает, потому что i содержит все значения в столбце, а не ссылку на столбец.Кроме того, обычно вы хотите, чтобы что-то более похожее на names(mydata)[i] выбрало одно значение из вектора имен.

Чтобы получить имена на графике рассеяния, попробуйте следующее:

# Sample data
f1 <- rnorm(100)
f2 <- rnorm(100)
f3 <- rnorm(100)
t1 <- rnorm(100)
t2 <- rnorm(100)
df <- data.frame(f1, f2, f3, t1, t2)

# Features, Targets to compare
targets <- c('t1', 't2')
features <- c('f1', 'f2', 'f3')

# The nested for loop.
for (i in features) {
  # i = 'f1', 'f2', 'f3', 'fn'
  for (j in targets) {
    # j = 't1', 't2', 'tn'
    p <- plot(
      df[[i]], # Reference to the dataframe column titled 'fn'
      df[[j]], # Reference to the dataframe column titled 'tn'
      main = paste(i, 'x', j), # Title using the strings
      xlab = i, # x-axis title
      ylab = j  # y-axis title
    )
  }
}
0 голосов
/ 16 ноября 2018

Вам нужно только выбрать обе функции и передать их в paste0(), выполнив следующие действия:

feature1<- rnorm(100)
feature2<- rnorm(100)
feature3<- rnorm(100)
target1<- rnorm(100)
target2<- rnorm(100)

mydata<- data.frame(feature1, feature2, feature3, target1, target2)
par(mfrow=c(2,3))
features<- c("feature1", "feature2", "feature3")
targets<- c("target1", "target2")
for(i in 1:length(targets)){
  for(j in 1:length(features)){
    plot(mydata[,c(features[j], targets[i])], main = paste0(c(features[j], "vs",targets[i])))
  } }

enter image description here

Если вы хотите простопостроить все переменные против всех переменных, вы можете просто использовать plot(mydata)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...