我在.csv中阅读并希望对其执行一项功能。所以我这样做:
我想打电话的功能
award_test <- function(df) {
df$rating_weging <- 0
for (rows in 1:nrow(df)){
if((df$won[rows] == "W") && (df$verschil[rows] > 0.6)){
df$rating_weging[rows] <- 0.75
}
}
return(df)
}
读入.csv文件并在其上执行该功能。
set <- function(){
setwd("dir")
df <- read.csv("club_Barcelona.csv", header = T)
#perform function
award_test(df)
write.csv(df,"club_Barcelona.csv")
setwd("dir")
}
但是我这样做我的df并没有改变。我没有看到列rating_weging ...
对这里出了什么问题的想法?
答案 0 :(得分:0)
在award_test
内呼叫set
功能时,不保存其输出。正如@Ven Yao指出的那样,你应该对你的set
函数做一个简单的改变:
set <- function(){
setwd("dir")
df <- read.csv("club_Barcelona.csv", header = T)
#perform function
df <- award_test(df)
write.csv(df,"club_Barcelona.csv")
setwd("dir")
}
答案 1 :(得分:0)
这里的问题是你没有保存功能的输出。
正如其他答案所述,df <- award_test(df)
应该可以解决问题。
与问题没有特别关联的部分,但可能对OP有用
由于OP似乎对R来说相对较新,我想指出的是,与循环所有行相比,有更清晰(可能更快)的方法。
例如,ifelse
在这种情况下可能很有用。
df$rating_weging = ifelse((df$won == 'W' & df$verschil > 0.6),0.75,0)
如果满足条件,则分配特定值,在这种情况下为0.75,如果不满足,则分配另一个值。 (在这种情况下为0)。
您可以使用此语句替换整个函数体!
在很多情况下,R的循环往往很慢。
看看这个更多: http://www.r-bloggers.com/for-loops-and-how-to-avoid-them/