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
字符串传递,将其提供给 rm
的 list
参数,该参数接受一个 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
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
字符串传递,将其提供给 rm
的 list
参数,该参数接受一个 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