lapply 中的 R- 函数具有超过 1 个参数
R- function in lapply with more than 1 parameter
我需要将用户函数应用于 data.frame 的一部分。在之前的 中,我学会了为此使用 lapply。我现在有一个需要 2 个参数的函数:
truncar<-function(tbl, x){if(class(tbl[[x]])=='factor') {
tbl[,x]=as.character(tbl[[x]])
tbl[tbl[,x]=='**',x]<-0
tbl[,x]=as.numeric(tbl[[x]])}
tbl[is.na(tbl[,x]),x]<-0
y=ifelse(tbl[,x]>0,1,0)
return(y)}
此代码有效。例如 table 可能是:
df <- data.frame(A=c(-3:6, '**'), B=-1:9, C=c(-2:7,NA), D=factor(-3:7))
如果我每次将它应用于一列,我会得到想要的结果:
> truncar(df, 'A')
[1] 0 0 0 0 1 1 1 1 1 1 0
但是如果我尝试使用 lapply 对许多变量执行此操作,我会收到一条错误消息:
factors<-c('A', 'B', 'C')
lapply(df[,factors], truncar)
Error in NextMethod("[[") : argument "x" is missing, with no default
我知道这可能是因为我的函数需要 2 个参数。如何获得列表中所有变量的结果?
我想你想要的是
lapply(factors, function(x) truncar(df, x))
这会为 factors
中的每个因子调用 df
上的 truncar
函数。
我需要将用户函数应用于 data.frame 的一部分。在之前的
truncar<-function(tbl, x){if(class(tbl[[x]])=='factor') {
tbl[,x]=as.character(tbl[[x]])
tbl[tbl[,x]=='**',x]<-0
tbl[,x]=as.numeric(tbl[[x]])}
tbl[is.na(tbl[,x]),x]<-0
y=ifelse(tbl[,x]>0,1,0)
return(y)}
此代码有效。例如 table 可能是:
df <- data.frame(A=c(-3:6, '**'), B=-1:9, C=c(-2:7,NA), D=factor(-3:7))
如果我每次将它应用于一列,我会得到想要的结果:
> truncar(df, 'A')
[1] 0 0 0 0 1 1 1 1 1 1 0
但是如果我尝试使用 lapply 对许多变量执行此操作,我会收到一条错误消息:
factors<-c('A', 'B', 'C')
lapply(df[,factors], truncar)
Error in NextMethod("[[") : argument "x" is missing, with no default
我知道这可能是因为我的函数需要 2 个参数。如何获得列表中所有变量的结果?
我想你想要的是
lapply(factors, function(x) truncar(df, x))
这会为 factors
中的每个因子调用 df
上的 truncar
函数。