Patrząc na odpowiedź zamieszczoną niedawno na SO, zauważyłem nieznane oświadczenie o przypisaniu. Zamiast zwykłej formy myVar<- myValue
używał on dla myVar[]<- myValue
. Osobiście nigdy nie widziałem takiego zadania, ale miało bardzo użyteczny efekt - przekształciło przypisane dane myValue w kształt myVar.R: Łatwe przyporządkowanie z pustymi nawiasami kwadratowymi? x [] <-
Chciałbym użyć tego w moim kodzie. Jednak dokumentacja dla "<-"
wydaje się milczeć na ten temat.
Czy jest to funkcja dobrze znana i można na niej polegać we wszystkich przypadkach?
Zgaduję również, że może to być efekt uboczny stosu wywołań funkcji, to jest wywoływanie kolejno sekwencji <-
i [
, ale nie mogłem ustalić, w jaki sposób. Czy ktoś może rzucić trochę światła na to?
Oto example--
# A dataframe
df1<- data.frame(a=1:4, b=11:14)
# simple assignment assigns to class of RHS
df1<- c(21:24,31:34)
df1
#[1] 21 22 23 24 31 32 33 34
class(df1)
#[1] "integer"
#assignment with [] casts to class of LHS
df1<- data.frame(a=1:4, b=11:14)
df1[]<- c(21:24,31:34)
df1
# a b
# 1 21 31
# 2 22 32
# 3 23 33
# 4 24 34
# recycling to preserve shape
df1[]<- c(101:102)
df1
# a b
# 1 101 101
# 2 102 102
# 3 101 101
# 4 102 102
class(df1)
#data.frame
# reshaping
df1<- data.frame(a=1:4, b=11:14)
df1[] <- matrix(1:8, 2,4)
df1 #matrix reshaped
class(df1)
#[1] "data.frame"
# flattening
x<- 1:8
x[]<- matrix(1:8,4,2)
x
#[1] 1 2 3 4 5 6 7 8
Kilka wskazówek: sprawdź '' Extract' i spróbuj uruchomić ''[<-' (df1 ,,, 8: 1)' – joran
@joran: tak .. wydaje się, że powinienem tam zajrzeć. Wielkie dzięki. Patrzę na to i jutro się odwrócę. dobrze późno późno tutaj .. –
Możesz wykopać logikę z 'body (" [<-. data.frame ")' jeśli czujesz się skłonny, ale nie jest przyjemną funkcją do przeczytania.To, o co pytasz, będzie dotyczyło sytuacji, w której brakuje zarówno "i", jak i "j" w wywołaniu funkcji. – nrussell