2013-01-16 10 views
26

ja przeglądania dataframe na badania z użyciem View:Programowo zamknąć okno utworzone przez `View (x)`

my_df <- data.frame(a=1:10, b=letters[1:10]) 
View(my_df) 

Chciałbym teraz zamknąć okno wynikowy programowo (zamiast kliknięcie Przycisk X).

Jak mogę to zrobić? graphics.off nie działa, ponieważ nie jest urządzeniem graficznym. Patrząc na kod View, wewnętrzna funkcja dataviewer jest używana do wyświetlania okna, ale nie jestem pewien, co używa w tle (tcltk?), Więc nie jestem pewien, jak zamknąć okno.


Kilka uwag na temat tego, dlaczego tego chcę.

Zasadniczo robię krok sprawdzający użytkownika w skrypcie, dzięki czemu użytkownik jest pytany, czy fragment ramki danych i odpowiadający mu obraz pasują do siebie. To idzie tak:

for (i in 1:heaps) { 

    1. View(a snippet of a big dataframe) 
    2. show an image 

    3. readline('Is this OK? [Y/N]: ') (store the i for which it's not OK) 

    4. close the image window (graphics.off()), close the View(..) window. 
} 

I w zasadzie chciał ograniczyć interakcji użytkownika w dół patrząc na obraz & dataframe urywek i wpisując Y lub N, dzięki czemu nie trzeba ręcznie zamknij okno th dataframe dla każdego i w pętli.

(Jestem w trakcie tej walidacji osobiście i mam do czynienia z oknami 200 View(snippet), których nie zawracałem sobie głowy zamykaniem D:. Zauważyłem także, że otwarcie okna kradnie klawiaturę z dala od monitu więc pisanie na klawiaturze nie jest tak szybkie, jak bym chciał, ale muszę to zrobić tylko raz, więc na razie to zrobię, ale jestem ciekawy co do odpowiedzi na to pytanie, na następny raz).

+0

Wydaje mi się, że 'Widok' jest interaktywnym narzędziem przez doskonałość, więc wydaje się trochę sprzeczne, że chcesz go zamknąć * programowo *. Czy z ciekawości mógłbyś wyjaśnić, w jaki sposób chcesz użyć widoku "View" w kontekście programowym?W przeciwieństwie do pisania np. 'My_df' do pliku csv w celu ewentualnej recenzji. Wciąż mam nadzieję, że ktoś przyjdzie z miłą odpowiedzią. – flodel

+0

Jeśli dobrze rozumiem, chcesz uruchomić linię kodu (jedną trzeba będzie uruchomić ręcznie), aby zamknąć okno. Więc jeśli chcesz uzyskać kod, natychmiast otworzy i zamknie okno? –

+0

Dodałem trochę wyjaśnienia co do mojej motywacji w pytaniu. Zasadniczo pytam użytkownika, aby porównać niektóre wiersze ramki danych z obrazem i wpisać Y/N, czy pasują do siebie, czy nie (walidacja użytkownika). Po prostu chcę, aby było to tak proste, jak to tylko możliwe, ponieważ to ja dokonuję walidacji! –

Odpowiedz

3

Jednym ze sposobów osiągnięcia tego, o co nam chodzi, jest skorzystanie z funkcji system. Można na przykład określić okno ID/Nazwa, a następnie wystawić bliską polecenie tak:

system('(sleep 10; wmctrl -c "Data: my_df") &') 

Powyższe polecenie odczekaj 10 sekund, a następnie wydać polecenie menedżera okien, aby zamknąć wszystkie okna z nazwa "Data: my_df". Te 2 polecenia są zawijane w parens. Jest to znane jako Kombinacja złożona w bash. Całe Komenda złożona jest w tle, "&".

przetestowałem następujące i to działało:

# sample1.R 
my_df <- data.frame(a=1:10, b=letters[1:10]) 
system('(sleep 10; wmctrl -c "Data: my_df") &') 
View(my_df) 

Innym sposobem osiągnięcia tego celu jest tak:

# sample2.R 
my_df <- data.frame(a=1:10, b=letters[1:10]) 
View(my_df) 
system('read -p "Press [Enter] key to start backup..."') 
my_df2 <- data.frame(a=1:10, b=letters[1:10]) 
View(my_df2) 
system('read -p "Press [Enter] key to start backup..."') 

biegnę to tak:

R CMD BATCH sample2.R 

UWAGA: Pytanie od polecenia read -p nie jest " t pojawia się w moim terminalu, ale możesz po prostu wydrukować duplikat wiadomości w R.

Powiązane problemy