Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/395.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在R中的data.frame列上循环_R_Loops_Dataframe_Lapply - Fatal编程技术网

在R中的data.frame列上循环

在R中的data.frame列上循环,r,loops,dataframe,lapply,R,Loops,Dataframe,Lapply,在下面的函数foo中,我想知道如何循环什么 foo <- function(data, what){ formula <- as.formula(paste('~', what)) dum <- data.frame(model.matrix(formula, data = data))[-1L] cbind(data, dum) } dat <- data.frame(number = -3:2, gender = rep(c("M","F"), 3), regi

在下面的函数
foo
中,我想知道如何循环
什么

foo <- function(data, what){
formula <- as.formula(paste('~', what))
dum <- data.frame(model.matrix(formula, data = data))[-1L] 
cbind(data, dum)
} 

dat <- data.frame(number = -3:2, gender = rep(c("M","F"), 3), region = rep(LETTERS[1:2],3))

foo如果我们需要创建新列

foo <- function(data, what){
    formula <- as.formula(paste('~', what))
    data.frame(model.matrix(formula, data = data))[-1]
   }

what = c('gender', "region")

cbind(dat, do.call(cbind, lapply(what, foo, data = dat)))
#   number gender region genderM regionB
#1     -3      M      A       1       0
#2     -2      F      B       0       1
#3     -1      M      A       1       0
#4      0      F      B       0       1
#5      1      M      A       1       0
#6      2      F      B       0       1

foo您的预期输出是什么,如果您只需要“dum”输出,那么在最后一步不要
cbind
在这种情况下只需执行
dum@Reza您是在更新“What”列还是在创建新列时使用“M”作为suffix@Reza这只是基于你的功能。我刚刚删除了
cbind
@Reza,我明白了这一点,但在你的帖子中,你是在说
what
,即
dat[what]
foo <- function(data, what){
    formula <- as.formula(paste('~', what))
    data.frame(model.matrix(formula, data = data))[-1]
   }

what = c('gender', "region")

cbind(dat, do.call(cbind, lapply(what, foo, data = dat)))
#   number gender region genderM regionB
#1     -3      M      A       1       0
#2     -2      F      B       0       1
#3     -1      M      A       1       0
#4      0      F      B       0       1
#5      1      M      A       1       0
#6      2      F      B       0       1