Le decisioni di progettazione per il comportamento predefinito di R sono ottimizzate per l'uso interattivo, ma possono comportare un comportamento indesiderato in codebase di grandi dimensioni eseguiti senza molta sorveglianza dell'utente. Sarei interessato a trovare modi per rendere la lingua un po 'più rigida. Ho due esempi di base.modifica comportamento predefinito operatore
(riciclaggio) vettori non congruenti vengono riciclati in operazioni arythmetic:
> x=1:10
> y=1:20
> y=rep(1,20)
> x+y
[1] 2 3 4 5 6 7 8 9 10 11 2 3 4 5 6 7 8 9 10 11
C'è un modo per rendere questo risultato il funzionamento in un errore?
(conversione) conversioni si verificano durante l'aggiornamento vettori, a volte cambiando il tipo di elemento essendo aggiornato, talvolta il tipo del vettore:
> x[1] <- 'a'
> x
[1] "a" "2" "3" "4" "5" "6" "7" "8" "9" "10"
> x[1] <- 1
> x
[1] "1" "2" "3" "4" "5" "6" "7" "8" "9" "10"
Esiste un modo per fare questo risultato dell'operazione in errore?
Credo che gran parte della frustrazione degli utenti nuovi e intermedi derivi da comportamenti come questi (che a loro volta si traducono in un giudizio sintetico sulla lingua!). Qualsiasi puntatore a approcci generali per affrontare il riciclaggio e la conversione è molto gradito.
Il riciclaggio e la conversione sono proprietà fondamentali della lingua. Entrambi sono implementati a livello C. Imho cambiando questo in generale richiederebbe la modifica del codice sorgente di base e la ricostruzione di R. Sarebbe un compito non banale e ci si può aspettare che rompa molte, molte altre funzioni. Potresti, ad esempio, scrivere metodi '+' per alcune classi che testano se l'input è di uguale lunghezza, ma ci sarebbero costi di performance significativi e sembra che tu abbia qualcosa di più generale in mente. – Roland
Ciò che Roland ha detto è giusto e non dovresti rovinare le funzioni originali, ma puoi creare la tua funzione simile senza una grossa perdita di prestazioni, ad esempio '' '' "% +%" <- function (x, y) {stopifnot (length (x) == length (y)); '+' (x, y)} '' '' quindi puoi testarlo con 'x% +% y' –
Per il riciclaggio puoi guardare [questa domanda e i suoi commenti] (http://stackoverflow.com/questions/9424976/incondizionati-warnings-quando-riciclaggio). Sembra che sia impossibile modificare questa caratteristica R di base. – agstudy