Многие учебники R поощряют использование $ для извлечения переменных (столбцов) из data.frames ^. Однако я обнаружил, что это не работает внутри функции, и я не могу понять, почему.
data(BOD)
print(BOD)
# These work.
BOD$'demand'
BOD[ ,'demand']
# This works.
myFunc1 <- function(x, y){
z <- x[ , y]
return(z)
}
out <- myFunc(BOD, 'demand')
# This doesn't work.
myFunc2 <- function(x, y){
z <- x$y
return(z)
}
out <- myFunc2(BOD, 'demand')
Я заметил, что в R Язык определении говорится:
формы с помощью $ относится к рекурсивным объектам, таким как списки и pairlists. Он допускает только буквенную> символьную строку или символ в качестве индекса. То есть индекс не является вычислимым: для случаев, когда> вам нужно оценить выражение для поиска индекса, используйте x [[expr]]. Когда $ применяется к нерекурсивному объекту, результат всегда был NULL: как из R 2.6.0 это ошибка.
Является ли myFunc2 выше примера, где $ не предоставляется буквальная строка символов?
^Zuur 2009 'Руководство для начинающих R' р 61
^'Манипулирование данными с R' Spector 2008 р 26, 64, 69
То, что вы делаете внутри функции, не работает вне функций: 'y = 'demand'; z = BOD $ y' – Marius
'fortune (312)' здесь снова имеет значение: «Проблема здесь в том, что нотация $ является магическим ярлыком и, как и любая другая магия, если используется , неверно, скорее всего, сделает программный эквивалент превращения себя в жабу " – thelatemail