我有一个我正在学习的类的数据集,它来自UCI机器学习存储库。我必须按日期对其进行子集划分,然后按日期和时间绘制各种测量结果。为了准备数据集,我使用以下代码:
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")
}
然后,当我在控制台中运行脚本时,我键入";功率<-prep((";并且将子集合的数据放入变量"0"中;功率;正如我所期望的:
头(mydata(
日期时间Global_active_power Global_reactive_power Voltage Global_intensity Sub_metering_1 Sub_meterg_2 Sub_meters_3
66637 2007-02-01 00:00:00 0.326 0.128 243.150 1.400 0.000 66637 0.000 0
66638 2007-02-01 00:01:00 0.326 0.130 243.320 1.400 0.000 66638 0.000 0
66639 2007-02-01 00:02:00 0.324 0.132 243.510 1.400 0.000 66639 0.000 0
66640 2007-02-01 00:03:00 0.324 0.134 243.900 1.400 0.000 66640 0.000 0
66641 2007-02-01 00:04:00 0.322 0.130 243.160 1.400 0.000 66641 0.000 0
66642 2007-02-01 00:05:00 0.320 0.126 242.290 1.400 0.000 66642 0.000 0
然而,在绘制图的过程中,我发现,为了匹配课程图,我需要在数据帧中创建一个新列$newdate,将Date和Time列合并为一列。所以我试着调整我的脚本如下:
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变量中。然而,当我运行该函数时,我得到的唯一输出是$newdate列的内容:
头(mydata(
[1] ";2007-02-01 00: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";
我做错了什么?为什么第二个脚本不输出整个数据集,并在末尾添加一个新列?有人能告诉我如何纠正吗?
R中的函数返回最后一个求值的表达式。考虑这两个功能:
f1 <- function(x) {
x$a <- 2
x
}
f2 <- function(x) {
x$a <- 2
}
给定列表,f1
将返回列表,而f2
将返回长度为1(数字2(的数字矢量:
> x <- list(a = 1)
> str(f1(x))
List of 1
$ a: num 2
> str(f2(x))
num 2
>
有关更多详细信息,Hadley Wickham的函数教程值得一读。
在R函数中,如果不使用return,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)
}