magrittr 包中的管道不适用于函数 rm()

Pipe in magrittr package is not working for function rm()

x = 10
rm(x) # removed x from the environment

x = 10
x %>% rm() # Doesn't remove the variable x 

1) 为什么管道技术不删除变量?
2) 如何交替使用 pipe 和 rm() 来删除变量?

脚注:这个问题可能类似于Pipe in magrittr package is not working for function load()

使用 %<>% 运算符将值赋给 NULL

x %<>% 
   rm()

在管道中,我们获取的是值而不是对象。因此,通过使用 %<>% 即就地复合赋值运算符,'x' 的值被分配给 NULL

x
#NULL

如果我们需要删除对象,将其作为 character 字符串传递,将其提供给 rmlist 参数,该参数接受一个 character 对象,并且然后指定 environment

x <- 10
"x" %>% 
    rm(list = ., envir = .GlobalEnv)

当我们调用'x'

x

Error: object 'x' not found

... 不起作用的原因是对象 . 未在 rm

中求值
x <- 10
"x" %>%
    rm(envir = .GlobalEnv)

Warning message: In rm(., envir = .GlobalEnv) : object '.' not found


另一种选择是使用 do.call

x <- 10
"x" %>%
   list(., envir = .GlobalEnv) %>% 
   do.call(rm, .)
x

Error: object 'x' not found