R: ループ結果を簡単にデータフレームに, magicfor

データの作業でloop「繰り返し」はもっともよく使う関数の一つです。

Loop関数はいくつかありますが、基本となるのはforです。

はじめはややこしいので、forの使用法については別に書きたいと思います。

ここでは簡単なfor文と、magicforを使ってloop結果をオブジェクトして保存する方法を紹介します。

次を参考にしました。

 

Magic Functions to Obtain Results from for Loops in R

 

I.forとmagicforのサンプル1

 

次のように簡単に1から5までを2倍したリストを得ることができます。

 

for (i in 1:3) {
doubled <- i * 2
print(doubled)
}
#> [1] 2
#> [1] 4
#> [1] 6

 

で、この計算結果を利用するためには、まず、名前をつけて保存する必要がありますが、これが手間です。

下のようにベクトル枠を作成しておいて、forの計算結果をいれます。

 

result <- vector("numeric", 3) # prepare a container
for (i in 1:3) {
doubled <- i * 2
result[i] <- doubled # change to assignment
}
result
#> [1] 2 4 6

 

さらに、データフレーム(表計算のシートのように列タイトルのある形)にすと次のようにします。

 

result <- data.frame(matrix(nrow = 3, ncol = 2))
colnames(result) <- c("i", "doubled")
for (i in 1:3) {
squared <- i * 2
result[i, 1] <- i
result[i, 2] <- doubled
}
result
#> i doubled
#> 1 1 2
#> 2 2 4
#> 3 3 6

 

II.magicforで簡単にデータフレームを作成

 

magicforを用いるとforの結果をデータフレームにできます。ただし、私の5.バージョン(3.52)では、magicforは利用できますが、ベースのforがマスクの動作が変わります。自動的に算出結果をプリントしなくなります。表示されないだけで、計算自体はできていると思います。

削除する場合は、remove.packages(“rpart”)を実行しただけではうまくいきません。

次のエラーが出ました。次はコンソール画面です。

 

 

ls(all.names = TRUE)でリストにforがあることを確認しrm(for)で削除するとbaseのforが普通に使えるようになりました。Rを起動した時に読み込まれるnamespacesで、ベースのforがマスクされてされるので、forスペースを削除したというようなことかと思いますが、はっきりとは理解したいません。

forの結果をプリントしてくれないと、初心者としてはやりにくいです。式の書き方を帰るとよいようですが、初心者としては、ふつうに計算結果を表示してくれたほうがわかりやすいです。

magicforは下のように極めて簡単にデータフレームを作成していくれるので魅力的ですが、初心者としてはインストールするかどうか迷うところです。

magicforを使用した例を紹介します。

次のデータフレームを作成したいとします。

 

 

次のように簡単に上のデータフレームを作成できました。

 

 

library(magicfor) # load library
magic_for(print, silent = TRUE) # call magic_for()
for (i in 2010:2015){
year_list <- paste("The year is", i)
print(year_list)
}
# get the result and assign it
data_year <- magic_result_as_dataframe()
# show the result
data_year
#> i year_list
1
#> 1 2010 The year is 2010
#> 2 2011 The year is 2011
#> 3 2012 The year is 2012
#> 4 2013 The year is 2013
#> 5 2014 The year is 2014
#> 6 2015 The year is 2015
 

Please follow and like us:
error

About shibatau

I was born and grown up in Kyoto. I studied western philosophy at the University and specialized in analytic philosophy, especially Ludwig Wittgenstein at the postgraduate school. I'm interested in new technology, especially machine learning and have been learning R language for two years and began to learn Python last summer. Listening toParamore, Sia, Amazarashi and MIyuki Nakajima. Favorite movies I've recently seen: "FREEHELD". Favorite actors and actresses: Anthony Hopkins, Denzel Washington, Ellen Page, Meryl Streep, Mia Wasikowska and Robert DeNiro. Favorite books: Fyodor Mikhailovich Dostoyevsky, "The Karamazov Brothers", Shinran, "Lamentations of Divergences". Favorite phrase: Salvation by Faith. Twitter: @shibatau

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.