我刚刚开始学习R并发现这个问题非常有趣,我只是直接运行代码而没有包装它可以工作的函数但是当我把它放在一个函数中它不起作用时,可能的原因是什么?
fill_column<-function(colName){
count <- 0
for(i in fg_data$particulars) {
count <- count +1
if(grepl(colName, i) && fg_data$value[count] > 0.0){
fg_data[,colName][count] <- as.numeric(fg_data$value[count])
} else {
fg_data[,colName][count] <- 'NA'
}
}
}
fill_column('volume')
在我创建名为volume的新列时,此字符串存在于详细列中。
我添加了一条评论,其他问题的解决方案对我不起作用,请查看下面的评论。
答案 0 :(得分:-1)
最后我得到了它的工作,但在SO上阅读另一个答案,这是解决方案:
fill_column <- function(colName){
count <- 0
for(i in fg_data$particulars) {
count <- count +1
if(grepl(colName, i) && fg_data$value[count] > 0.0){
fg_data[,colName][count] <- as.numeric(fg_data$value[count])
} else {
fg_data[,colName][count] <- 'NA'
}
}
return(fg_data)
}
fg_data = fill_column('volume')
现在的原因,通常在任何语言中,当我们修改任何函数内的全局对象时,它立即反映在全局对象上,但在R中我们必须从函数返回修改后的对象,然后再将它再分配给全局对象以查看我们的更改。或者这样做的另一种方法是使用envir = .GlobalEnv将函数内的本地对象分配给全局上下文。