/ / Как мога да почистя моето работно пространство R, като същевременно запазя определени обекти? - r, статистика

Как мога да почистя моето работно пространство, като същевременно запазя определени обекти? - r, статистика

Да предположим, че се забърквам с някои данни, като свързвам вектори заедно, както обичам да правя на мързелив неделен следобед.

    x <- rnorm(25, mean = 65, sd = 10)
y <- rnorm(25, mean = 75, sd = 7)
z <- 1:25

dd <- data.frame(mscore = x, vscore = y, caseid = z)

Вече имам новия си кадър от данни dd, което е чудесно. Но все още има и детрит от моите предишни срезове:

    > ls()
[1] "dd"        "x"          "y"          "z"

Какъв е простият начин да изчистим работното си пространство, ако вече не се нуждая от колоните "източник", но искам да запазя рамката? dd и нито една от по-малките променливи, които неволно биха маскирали по-нататъшен анализ:

    > ls()
[1] "dd"

Чувствам, че решението трябва да е във формата rm(ls[ -(dd) ]) или нещо, но не мога да разбера как да кажа "моля, почистете всичко, но следните обекти."

Отговори:

9 за отговор № 1

Бих подходил към това, като направих отделна среда, в която да съхранявам всички нежелани променливи, като използвам вашия кадър с данни with(), след това копирате онези, които искате да запазите в основната среда. Това има предимството да бъде подредено, но и да държи всичките си обекти наоколо в случай, че искате да ги видите отново.

temp <- new.env()
with(temp, {
x <- rnorm(25, mean = 65, sd = 10)
y <- rnorm(25, mean = 75, sd = 7)
z <- 1:25
dd <- data.frame(mscore = x, vscore = y, caseid = z)
}
)

dd <- with(temp,dd)

Това ви дава:

> ls()
[1] "dd"   "temp"
> with(temp,ls())
[1] "dd" "x"  "y"  "z"

и разбира се можете да се отървете от нежеланата среда, ако наистина искате.


11 за отговор № 2

Ето един подход, използващ setdiff:

rm(list=setdiff(ls(), "dd"))

0 за отговор № 3

Тъй като забравих, че коментарите не подкрепят пълното форматиране, исках да отговоря на препоръката на Хадли тук. Някои от съществуващия ми код - може би небрежно - са склонни да работят по следния начин:

    caseid <- 1:25
height <- rnorm(25, mean = 150, sd = 15)
hd     <- data.frame(caseid, height)
hd     <- hd [-(7), ] # Removing a case
library(ggplot2)
qplot(x = caseid, y = height, data = hd) # Plots 25 points

В горния код, qplot() ще начертае 25 точки и мисля, че това е защото моите глобални променливи caseid и height маскират опита за достъп до тях локално от предоставената рамка за данни. Така че случаят, който изтрих, все още изглежда да се начертае, защото се появява в глобалните променливи, макар и не в рамката на данните hd по време на qplot() обадете се.

Смисълът ми е, че това поведение е изцялоочаквам, и че отговорът тук е, че следвам една неоптимална практика за кодиране.