2016-08-05 30 views
0

私はUCI Machine Learningリポジトリから取得したクラスのデータセットを用意しています。私は日付でそれをサブセット化し、日付と時間でさまざまな測定値をプロットする必要があります。データセットを準備をするために、私は次のコードを使用します。私は、コンソールに私のスクリプトを実行すると、その後関数内でRデータセットに新しい列を作成する

prep <- function(x) { 
    setwd("/Users/johnlynch/Google Drive/DataToolbox/Exploring/Week 1") 
    power <- read.csv("poweruse.txt", sep = ";", stringsAsFactors = FALSE) 
    power$Date <- strptime(power$Date, "%d/%m/%Y") 
    power <- subset(power, Date == "2007-02-01"|Date == "2007-02-02") 
} 

を、私は「パワー< - 予備校()」と入力し、サブセット化データを変数に入れている「とパワー、」私は期待どおりに:

ヘッド(MYDATA)

日付時間Global_active_power Global_reactive_power電圧Global_intensity Sub_metering_1 Sub_metering_2 Sub_metering_3

666 37 2007-02-01午前0時00分00秒0.326 0.128 243.150 1.400 0.000 0.000 66637 0

66638 2007-02-01午後12時01分○○秒0.326 0.130 243.320 1.400 0.000 0.000 66638 0

66639 2007-02 66639 0.000 0

66640 2007-02-01午前0時03分00秒0.324 0.134 243.900 1.400 0.000 0.000 66640 0

66641 2007-02-01 00 -01午前0時02分00秒0.324 0.132 1.400 0.000 243.510。 04:00 0.322 0.130 243.160 1.400 0.000 66641 0.000 0

私はプロットを行ったよう

66642 2007-02-01午後12時05分00秒0.320 0.126 1.400 0.000 242.290 66642 0.000 0

しかし、私はコースのプロットを一致させるために、私が作成するために必要な、ということを発見しました日付と時刻の列を1つにまとめて、データフレームの新しい列$ newdateを作成します。だから私は、次のように私のスクリプトを調整してみました:

prep <- function(x) { 
    setwd("/Users/johnlynch/Google Drive/DataToolbox/Exploring/Week 1") 
    power <- read.csv("poweruse.txt", sep = ";", stringsAsFactors = FALSE) 
    power$Date <- strptime(power$Date, "%d/%m/%Y") 
    power <- subset(power, Date == "2007-02-01"|Date == "2007-02-02") 
    power$newDate <- with(power, paste(Date, Time)) 
} 

私はmydataという変数へのデータの残りの部分と一緒に出力されることでしょうデータフレームで新しい列を作成する必要がありますこと、ちょっと、と思いました。私はその機能を実行したときしかし、私が手ONLY出力は、$ NEWDATE列の内容です:

ヘッド(MYDATA)

[1]「2007-02-01午後12時00: 00 "" 2007-02-01 00:01:00 "" 2007-02-01 00:02:00 "" 2007-02-01 00:03:00 "

[5]" 2007-02- 01 00:04:00 "" 2007-02-01 00:05:00 "

何が間違っていますか? 2番目のスクリプトがデータセット全体を出力しないのはなぜですか?最後に新しい列が追加されます。誰かがそれを修正する方法を教えてもらえますか?

+1

関数の最後の行に 'return(power)'(または単に 'power')を追加します。 –

+0

Weihuangは正しいです。関数はコードの最後の行にあるオブジェクトのみを返します。あなたのケースでは、単に列を作成していました。 – winampman

答えて

0

Rの関数は、評価される最後の式を返します。これら二つの機能を考慮してください詳しく

> x <- list(a = 1) 
> str(f1(x)) 
List of 1 
$ a: num 2 
> str(f2(x)) 
num 2 
> 

、ハドリー:f2は、長さ1(数2)の数値ベクトルが返され、一方のリストが与えられると

f1 <- function(x) { 
    x$a <- 2 
    x 
} 

f2 <- function(x) { 
    x$a <- 2 
} 

f1は、リストが返されますWickhamのtutorial on functionsは読む価値があります。

+0

それはそれを正確に解決しました!それを非常に明確に説明してくれてありがとう、私はWickhamのチュートリアルを読むでしょう。 –

0

リターンを使用しない場合、Rはに戻ります。最後のラインコードはデフォルトです。 あなたが望む結果を返すことを忘れないでください。

prep <- function(x) { 
    setwd("/Users/johnlynch/Google Drive/DataToolbox/Exploring/Week 1") 
    power <- read.csv("poweruse.txt", sep = ";", stringsAsFactors = FALSE) 
    power$Date <- strptime(power$Date, "%d/%m/%Y") 
    power <- subset(power, Date == "2007-02-01"|Date == "2007-02-02") 
    power$newDate <- with(power, paste(Date, Time)) 
    return(power) 
} 
関連する問題