如何循环遍历data.frame的列并使用函数
这可能已经得到了回答,在这种情况下,我很抱歉重复这个问题,但不幸的是,我找不到问题的答案。我目前正在努力提高代码的可读性,并尝试更频繁地使用函数,但我对它不太熟悉 我有一个如何循环遍历data.frame的列并使用函数,r,function,scope,R,Function,Scope,这可能已经得到了回答,在这种情况下,我很抱歉重复这个问题,但不幸的是,我找不到问题的答案。我目前正在努力提高代码的可读性,并尝试更频繁地使用函数,但我对它不太熟悉 我有一个data.frame,有些列包含NA,在本例中,我想用一个简单的卡尔曼滤波器进行插值 require(imputeTS) #some test data col <- c("Temp","Prec") df_a <- data.frame(c(10,13,NA,14,17),
data.frame
,有些列包含NA
,在本例中,我想用一个简单的卡尔曼滤波器进行插值
require(imputeTS)
#some test data
col <- c("Temp","Prec")
df_a <- data.frame(c(10,13,NA,14,17),
c(20,NA,30,NA,NA))
names(df_a) <- col
#this is my function I'd like to use
gapfilling <- function(df,col){
print(sum(is.na(df[,col])))
df[,col] <- na_kalman(df[,col])
}
#this is my for-loop to loop through the columns
for (i in col) {
gapfilling(df_a, i)
}
require(输入)
#一些测试数据
上校
如果没有for循环
,我如何实现这一点?据我所知,如果可能的话,你应该避免循环的,
,我确信这在我的情况下是可能的,我只是不知道怎么做
对于循环
,您绝对不必避免使用。您应该避免使用循环来执行可以矢量化的操作。循环一般来说很好,但是与编译语言(如)相比,它们(要慢得多),但与语言(如)中的循环相当
我的for循环可以工作,但它不会覆盖data.frame
。为什么?
这是一个覆盖函数中的值的问题,或者称为。基本上,任何分配都仅限于其当前环境(或范围)。以下面的例子为例:
f <- function(x){
a <- x
cat("a is equal to ", a, "\n")
return(3)
}
x <- 4
f(x)
a is equal to 4
[1] 3
print(a)
现在为了可读性(而不是速度),可以将其更改为lappy
df_a[, col] <- lapply(df_a[, col], na_kalman)
df_a[,col]非常感谢您花时间解释R中的basic。我喜欢lappy
方法,因为它的可读性。是否也可以将我的间隙填充功能与lappy
结合使用?我不明白如何将维度以正确的顺序传递给函数,互联网上的基本apply
教程对此没有帮助。没问题。在大多数情况下,简单地更改函数是一个问题,因此输入是单个列,而不是带有和索引的整个data.frame
<代码>间隙填充注:在后一种情况下,我的最后一个编码示例是df_a[,col]
df_a[, col] <- lapply(df_a[, col], na_kalman)