Есть ли подобная лапы функция для объекта S4? - PullRequest
0 голосов
/ 17 мая 2019

Чтобы применить функцию ко всем слотам в S4.

Конечно, это можно сделать с помощью цикла for slotNames(). Но мне любопытно, можно ли это сделать векторизованным способом.

1 Ответ

0 голосов
/ 22 мая 2019

В целом невозможно работать со слотами векторизованным способом, потому что у слотов может быть любой класс.Если класс имеет структуру

slotA = "factor"
slotB = "integer"
slotC = "numeric"

, то даже если вы применяете одну и ту же (универсальную) функцию ко всем из них (скажем, summary), фактические вызываемые методы будут отличаться.Задача просто не векторизована, как и векторизация набора команд «мыть пол, мыть машину и пылесосить ковер», даже если все они имеют общую функцию clean - вам нужна швабра для одногозадача, губка для другого и пылесос для третьего.(Сравните это с набором команд «Вакуум три ковра в спальне, коридоре и гостиной», которые можно векторизовать до некоторой степени - вам не нужно вынимать пылесос из коробки трираз и уберите его три раза, вы можете сделать это только один раз)

Если вы можете гарантировать, что все слоты будут принадлежать к одному и тому же классу, тогда будет легче векторизовать, но если это так,почему этот объект имеет структуру, которую он имеет?Если это должен быть S4, тогда просто определите простой класс, который содержит список, матрицу или массив, а затем используйте sapply или apply при необходимости.

...