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

Ash*_*ith 5 r rm dplyr magrittr

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

x = 10
x %>% rm() # Doesn't remove the variable x 
Run Code Online (Sandbox Code Playgroud)

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

脚注:这个问题或许类似于magrittr包中的Pipe不适用于函数load()

akr*_*run 6

使用%<>%运算符为值赋值NULL

x %<>% 
   rm()
Run Code Online (Sandbox Code Playgroud)

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

x
#NULL
Run Code Online (Sandbox Code Playgroud)

如果我们需要的对象被删除,把它作为 character字符串,它喂到list的参数rm,这需要character对象,然后指定environment

x <- 10
"x" %>% 
    rm(list = ., envir = .GlobalEnv)
Run Code Online (Sandbox Code Playgroud)

当我们称'x'

x
Run Code Online (Sandbox Code Playgroud)

错误:找不到对象'x'

...不起作用的原因是对象.未在内部进行评估rm

x <- 10
"x" %>%
    rm(envir = .GlobalEnv)
Run Code Online (Sandbox Code Playgroud)

警告消息:在rm(.,envir = .GlobalEnv)中:对象'.' 未找到


另一种选择是使用 do.call

x <- 10
"x" %>%
   list(., envir = .GlobalEnv) %>% 
   do.call(rm, .)
x
Run Code Online (Sandbox Code Playgroud)

错误:找不到对象'x'

  • @Amar它是一个复合赋值运算符 (2认同)