Rコンソールにさまざまなタイプのオブジェクトをロードしました。私はそれらをすべて使用して削除できます
rm(list=ls())
または、関数のみを削除します(変数は削除しません)。
rm(list=lsf.str())
私の質問は:関数以外のすべての変数を削除する方法はありますか
Rコンソールにさまざまなタイプのオブジェクトをロードしました。私はそれらをすべて使用して削除できます
rm(list=ls())
または、関数のみを削除します(変数は削除しません)。
rm(list=lsf.str())
私の質問は:関数以外のすべての変数を削除する方法はありますか
回答:
次に、関数を除くすべてのオブジェクトを削除するワンライナーを示します。
rm(list = setdiff(ls(), lsf.str()))
それは使用していますsetdiff
(によって返される、地球環境におけるオブジェクトのサブセットを見つけるためにls()
モードを持っていない)function
(によって返されますlsf.str()
)
.
です。私が話していることを確認するには、試してください.j <- 5; ls(); ls(all.names=TRUE)
投稿されたsetdiff
答えはいいです。しばらく前に書いたこの関連機能を投稿したいと思っただけです。その有用性は読者次第です:-)。
lstype<-function(type='closure'){
inlist<-ls(.GlobalEnv)
if (type=='function') type <-'closure'
typelist<-sapply(sapply(inlist,get),typeof)
return(names(typelist[typelist==type]))
}
ls.str()
はmode
なくコードをテストするコードとの興味深い比較になりtypeof
ます。(余談ですが、これらの2つのドキュメントの違いをドキュメントから理解できれば、私は非難されます)。
次のコマンドを使用して、すべての変数をクリアできます。変数を元に戻すことができないので注意してください。
rm(list=ls(all=TRUE))
これは私がどこかで拾って少し調整したかなり便利な関数です。ディレクトリに保存しておくと便利です。
list.objects <- function(env = .GlobalEnv)
{
if(!is.environment(env)){
env <- deparse(substitute(env))
stop(sprintf('"%s" must be an environment', env))
}
obj.type <- function(x) class(get(x, envir = env))
foo <- sapply(ls(envir = env), obj.type)
object.name <- names(foo)
names(foo) <- seq(length(foo))
dd <- data.frame(CLASS = foo, OBJECT = object.name,
stringsAsFactors = FALSE)
dd[order(dd$CLASS),]
}
> x <- 1:5
> d <- data.frame(x)
> list.objects()
# CLASS OBJECT
# 1 data.frame d
# 2 function list.objects
# 3 integer x
> list.objects(env = x)
# Error in list.objects(env = x) : "x" must be an environment
現在の環境から関数以外のすべてのオブジェクトを削除するためにこれを書きました(使用されているプログラミング言語はIDE R-StudioではRです)。
remove_list=c() # create a vector
for(i in 1:NROW(ls())){ # repeat over all objects in environment
if(class(get(ls()[i]))!="function"){ # if object is *not* a function
remove_list=c(remove_list,ls()[i]) # ..add to vector remove_list
}
}
rm(list=remove_list) # remove all objects named in remove_list
ノート-
rm(list =)の引数 "list"は文字ベクトルでなければなりません。
現在の環境の位置iにあるオブジェクトの名前はls()[i]から返され、オブジェクト自体はget(ls()[i])から返されます。したがって、オブジェクトのクラスはclass(get(ls()[i]))から返されます
rm(list=setdiff(ls(all.names=TRUE), lsf.str(all.names=TRUE)))