Chcę ukryć dane wyjściowe jednego polecenia (w tym przypadku apply
funkcji).
Czy można to zrobić bez użycia sink()
? Opisane rozwiązanie znalazłem poniżej, ale chciałbym to zrobić w jednej linii, jeśli to możliwe.
Chcę ukryć dane wyjściowe jednego polecenia (w tym przypadku apply
funkcji).
Czy można to zrobić bez użycia sink()
? Opisane rozwiązanie znalazłem poniżej, ale chciałbym to zrobić w jednej linii, jeśli to możliwe.
capture.output
. Lub użyj*_ply
z pakietu plyr.lapply
bez drukowania wyniku, wówczas 'l_ply' z jegoplyr
pakietu jest prawdopodobnie najbardziej odpowiednim wyborem.Odpowiedzi:
Nie jest jasne, dlaczego chcesz to zrobić bez
sink
, ale możesz zawijać dowolne polecenia winvisible()
funkcji, a to zablokuje wyjście. Na przykład:1:10 # prints output invisible(1:10) # hides it
W przeciwnym razie zawsze możesz połączyć elementy w jedną linię za pomocą średnika i nawiasów:
{ sink("/dev/null"); ....; sink(); }
źródło
invisible()
tylko pomija drukowanie wyrażenia, nie jest tosink()
jednowierszowe.apply
, jak na pytanie:invisible(apply(matrix(1:10), 1, as.numeric))
.{ sink("/dev/null"); ....; sink(); }
wolałbymcapture.output
, jakcapture.output
skutecznie robi dokładnie powyżej, tylko o wiele lepiej (spójrz na źródło, nazywa się sink jak w powyższym stylu, plus kilka fajnych rzeczy wokół niego).idw
funkcji w systemie Windows. Myślę, że najlepszym rozwiązaniem jest użyciesink
Użyj
capture.output()
funkcji. Działa bardzo podobnie jak jednorazowysink()
i w przeciwieństwie doinvisible()
tego, może tłumić więcej niż tylko drukować wiadomości. Ustaw argument plik na/dev/null
w systemie UNIX lub w systemieNUL
Windows. Na przykład, biorąc pod uwagę notatkę Dirka:> invisible(cat("Hi\n")) Hi > capture.output( cat("Hi\n"), file='NUL') >
źródło
capture.output(x <- log(2))
a potemx
ma wartośćlog(2)
...możesz użyć „capture.output” jak poniżej. Umożliwia to późniejsze wykorzystanie danych:
log <- capture.output({ test <- CensReg.SMN(cc=cc,x=x,y=y, nu=NULL, type="Normal") }) test$betas
źródło
R tylko automatycznie drukuje wyjście nieprzypisanych wyrażeń, więc po prostu przypisz wynik
apply
zmiennej do zmiennej, a nie zostanie on wydrukowany.źródło
print()
lub,cat()
który przechodzi do ekranu, a nie do przypisania.Następująca funkcja powinna zrobić dokładnie to, co chcesz:
hush=function(code){ sink("NUL") # use /dev/null in UNIX tmp = code sink() return(tmp) }
Na przykład z funkcją tutaj:
foo=function(){ print("BAR!") return(42) }
bieganie
Przypisuje 42 do x, ale nie wypisuje "BAR!" do STDOUT
Uwaga niż w systemie UNIX trzeba będzie zamienić „NUL” na „/ dev / null”
źródło
W przypadku, gdy ktoś przyjeżdża tutaj i szuka rozwiązania odpowiedniego dla RMarkdown, spowoduje to zablokowanie wszystkich danych wyjściowych:
Kod zostanie uruchomiony, ale dane wyjściowe nie zostaną wydrukowane w dokumencie HTML
źródło
Dodanie komentarza Hadley do odpowiedzi (mam nadzieję, że będzie ona lepiej widoczna). Korzystanie z rodziny aplikacyjnej bez nadruku jest możliwe przy użyciu
plyr
pakietux <- 1:2 lapply(x, function(x) x + 1) #> [[1]] #> [1] 2 #> #> [[2]] #> [1] 3 plyr::l_ply(x, function(x) x + 1)
Utworzona 2020-05-19 przez pakiet reprex (v0.3.0)
źródło
invisible(cat("Dataset: ", dataset, fill = TRUE)) invisible(cat(" Width: " ,width, fill = TRUE)) invisible(cat(" Bin1: " ,bin1interval, fill = TRUE)) invisible(cat(" Bin2: " ,bin2interval, fill = TRUE)) invisible(cat(" Bin3: " ,bin3interval, fill = TRUE))
generuje wyjście bez wartości NULL na końcu wiersza lub w następnym wierszu
Dataset: 17 19 26 29 31 32 34 45 47 51 52 59 60 62 63 Width: 15.33333 Bin1: 17 32.33333 Bin2: 32.33333 47.66667 Bin3: 47.66667 63
źródło