Ответ 1
Чтобы ответить на ваш вопрос: конечно. Для
iris[<-, blah, blah, blah, ?]
функция [
должна использовать другую функцию (или оператор) в качестве второго аргумента, а [
- это примитив, который этого не позволяет.
Вы можете утверждать, что "но функция называется [<-
". Это не. Если вы пишете
x[i,j,...]
Затем вы вызываете функцию [
с первым аргументом x
, вторым аргументом i
и т.д. В вашей строке кода i
есть функция <-
. Оператор присваивания действительно является функцией:
> `<-`
.Primitive("<-")
> `<-`("x",1)
> x
[1] 1
Итак, что вы пишете в этой строке, сводится к:
`[`(iris, <-, blah, blah ... )
и это даст ошибку в интерпретаторе R; оператор присваивания интерпретируется как попытка присвоить что-то. Это явно неверный код.
Вы можете предлагать использовать обратные такты, чтобы он стал:
iris[`<-`, blah, blah, ... ]
который переводится на
`[`(iris, `<-`, blah, blah ,... )
но и это то, что не является и никогда не будет разрешено примитивным [
.
Некоторые люди предложили вам написать свой собственный метод, и вы можете - для классов, которые вы сами определили. Но вы не можете переопределить [
сам, чтобы разрешить это для любого общего фрейма данных, если только вы не переписываете интерпретатор R, чтобы распознать вашу конструкцию как вызов [<-
вместо [
.