Путаница, указывающая на списки значений в функциях в R - PullRequest
0 голосов
/ 09 октября 2019

У меня проблемы с пониманием того, как функции R взаимодействуют с именами переменных. Если вы передаете имя переменной в функцию, она, кажется, ведет себя иначе, чем если вы передаете значение переменной в функцию, что меня смущает.

Я пробовал искать на форумах, но был бы признателен за некоторые разъяснения, так как я думаю, что с моим пониманием R. что-то в корне неверно

Следующий код дает желаемый эффект:

library(MASS)

hist(Boston$crim,xlab='Crime Rate',ylab='Frequency', main='Frequency plot of Crime Rate')

Ожидаемое поведение Все заголовки и метки гистограммы определены в функции.

Проблема возникает, когда я пытаюсь сделать это в цикле и выполнить несколько графиков, вызывая метки и графики, используя переменные в списках. Кажется, что вызов строки путем указания на значение в списке не проходит через функцию гистограммы.

sectors =c('crim','tax','ptratio')
xlabels =c('Crime Rate','Property Tax Rate', 'Pupil Teacher Ratio')
titles =c('Frequency plot of Crime Rate', 'Frequency plot of Tax Rate', 'Frequency Plot of Pupil:Teacher')


hist(Boston[sectors[1]],ylab='Frequency',xlab=as.character(xlabels[1]),main=as.character(titles[1]))

Это создает неправильное изображение, где, как вы можете видеть, заголовки и метки неверны. Не ожидаемое поведение

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

Заранее спасибо

1 Ответ

0 голосов
/ 09 октября 2019

Обратите внимание на разницу:

str(Boston[sectors[1]])
'data.frame':   506 obs. of  1 variable:
#  $ crim: num  0.00632 0.02731 0.02729 0.03237 0.06905 ...
str(Boston[, sectors[1]])
# num [1:506] 0.00632 0.02731 0.02729 0.03237 0.06905 ...
str(Boston[[sectors[1]]])
# num [1:506] 0.00632 0.02731 0.02729 0.03237 0.06905 ...

Фрейм данных - это особый вид списка, поэтому он может запутаться. Первый пример извлекает первый элемент списка (который здесь также является столбцом) и возвращает его в виде списка (фрейм данных). Вы должны получить сообщение об ошибке, потому что функция исторических данных принимает не список / фрейм данных, а вектор. Второй использует матричный / фрейм данных для извлечения столбца, чтобы вы получили числовой вектор. Третий пример рассматривает Бостон как список, извлекает только первый элемент и возвращает его, не помещая его в список. Страница руководства ?Extract говорит об этом, но может потребоваться несколько чтений, чтобы понять это. Также использование str() может помочь вам выяснить, что вы получаете.

Кроме того, ваши векторы являются символами, поэтому вам не нужно as.character():

i <- 3
hist(Boston[, sectors[i]], ylab='Frequency', xlab=xlabels[i], main=titles[i])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...