0

関数の内部で を生成しようとしたdata.frameときに、関数を呼び出すと、関数の外部ではすべてがうまく機能しているように見えたにもかかわらず、data.frameが生成されないことがわかりました。

これがどのように可能であるかを誰かに教えてもらえますか?

Species=c("a","b","c")
data=data.frame(Species)

df=data.frame(matrix(nrow=length(levels(data$Species)),ncol=43))
rm(df)
f<-function(data)
{
df=data.frame(matrix(nrow=length(levels(data$Species)),ncol=43)) 
}
f(data)

私のRstudioではdata.frame、関数を呼び出すときにnoが生成されますf!

> sessionInfo()
R version 2.14.1 (2011-12-22)
Platform: x86_64-pc-mingw32/x64 (64-bit)

locale:
[1] LC_COLLATE=English_Australia.1252       
LC_CTYPE=English_Australia.1252                   
LC_MONETARY=English_Australia.1252
[4] LC_NUMERIC=C                       LC_TIME=English_Australia.1252    

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

other attached packages:
[1] plyr_1.7.1         maptools_0.8-14    lattice_0.20-0     foreign_0.8-48     
geosphere_1.2-26  
[6] rgdal_0.7-8        outliers_0.14      XML_3.9-4.1        PBSmapping_2.62.34     
dismo_0.7-14      
[11] raster_1.9-58      sp_0.9-93         

loaded via a namespace (and not attached):
[1] grid_2.14.1  tools_2.14.1
4

1 に答える 1

0

これは驚くべきことではありません。関数が返すものを関数内のどこにも指定していません。これは、R のコマンド プロンプトで作成したオブジェクトを表示するのと同じ方法で行うことができます。オブジェクトの名前を入力します。または、 を使用することもできますreturn()

つまり、関数を次のように変更します (基本 R 関数との潜在的な競合を避けるために、"df" を "mydf" に、"data" を "mydata" に変更しました)。

f <- function(mydata)
{
  mydf = data.frame(matrix(nrow=length(levels(data$Species)), ncol=43))
  mydf
  ## Or, more explicitly
  ## return(mydf)
}

を使用して実行できるようになりましたf(data)。ただし、これは出力を表示するだけで、オブジェクトに割り当てないことに注意してください。オブジェクト (「mydf」など) に割り当てたい場合は、 を使用する必要がありますmydf <- f(data)


関数で使用する別のオプションがあり<<-ます。

f <- function(mydata)
{
  mydf <<- data.frame(matrix(nrow=length(levels(data$Species)), ncol=43))
  ## uncomment the next line if you want to *display* the output too
  ## mydf
}

> rm(mydf)
> ls(pattern = "mydf")
character(0)
> f(data) ## No ouput is displayed when you run the function
> ls(pattern = "mydf")
[1] "mydf"
于 2013-03-23T18:56:18.543 に答える