创建一个函数以接收R中的数据帧名称和列

创建一个函数以接收R中的数据帧名称和列,r,function,r-mice,R,Function,R Mice,我想创建一个函数,让我输入dataframe名称和列并返回rowmeans,它的插补值已经通过鼠标对每个列进行插补 #fillNA values for columns fillna_func <- function(data, col){ df <- data.frame(rowMeans(imp_model$imp$col)) brf <- data.frame(data[, col]) colnames(brf) <- "col2" colnames

我想创建一个函数,让我输入dataframe名称和列并返回rowmeans,它的插补值已经通过鼠标对每个列进行插补

#fillNA values for columns
fillna_func <- function(data, col){
  df <- data.frame(rowMeans(imp_model$imp$col))
  brf <- data.frame(data[, col])
  colnames(brf) <- "col2"
  colnames(df) <- "col2"
  brf$col1 <- rownames(brf)
  df$col1 <- rownames(df)
  setDF(brf[df,col2_ :=i.col2,on=.(col1)])
  }
brfss2013$X_bmi5 <-  fillna_func(brfss2, "X_bmi5" )
brfss2013$X_bmi5 <-  fillna_func(brfss2, "pa1min_" )

已使用以下代码设法解决此问题:

fillna_func <- function(data, column){
  df <- data.frame(rowMeans(imp_model$imp[[column]]))
  brf <- data.frame(data[[column]])
  colnames(brf) <- "col2"
  colnames(df) <- "col2"
  brf$col1 <- rownames(brf)
  df$col1 <- rownames(df)
  setDF(brf[df,col2_ :=i.col2,on=.(col1)])
  }
brfss2013$X_bmi5 <-  fillna_func(brfss2, "X_bmi5" )

在此[[]中包装列号似乎有助于解决直接引用我试图在函数中使用的列的问题

好的,您在哪里定义imp_模型?它不在功能中,所以你马上就超出了范围,通常在测试、再现性和副作用方面都是不好的做法。通常,函数应该只处理显式传递给它的数据。我在这里强调我对函数式编程的偏好,但我认为这是在这种情况下的一个基本习惯。你试图在向量上做rowmeans。您希望得到什么?另外,假设imp_model$imp$col试图引用传递的变量col,您需要将其设置为imp_model$imp[,col]。@iod尝试过,我并不是说这会解决您的问题-您的问题是,您试图在向量而不是矩阵上应用行均值。我只是指出,另外,您还需要使用[,col]而不是$col
fillna_func <- function(data, column){
  df <- data.frame(rowMeans(imp_model$imp[[column]]))
  brf <- data.frame(data[[column]])
  colnames(brf) <- "col2"
  colnames(df) <- "col2"
  brf$col1 <- rownames(brf)
  df$col1 <- rownames(df)
  setDF(brf[df,col2_ :=i.col2,on=.(col1)])
  }
brfss2013$X_bmi5 <-  fillna_func(brfss2, "X_bmi5" )