我的问题并不像听起来那么疯狂(希望如此)。我有一个函数,它将数据帧列表作为输入,并作为输出给出相应线性模型的列表。该函数的一个输入是参数log_transform
。我希望用户能够输入要进行日志转换的变量列表,并由模型考虑。然而,这有点复杂,因为这不仅需要应用于多个变量,还需要应用于多个数据帧的多个变量。就像我这样编码:
function(df_list, log_transform = c("var1", "var2")) {
if(!is.null(log_transform)) { #"If someone inupts a list of variables to be transformed, then..."
trans <- function(df) {
sapply(log_transform, function(x) { #"...apply a log transformation to each variable..."
x <- log(x + 1)
}, simplify = T)
llply(df_list, trans) #"...for each dataframe in df_list."
}
etc
}
然而,当我尝试运行它时,我收到错误:
Error in x + 1 : non-numeric argument to binary operator
我哪里错了?
由于
答案 0 :(得分:0)
没有提供测试用例,所以这仍未经过测试,但检查了语法完成情况并添加了右侧的curley-brace。您仍然需要在代码未执行的组件数据框中按名称引用列:
function(df_list, log_transform = c("var1", "var2")) {
if(!is.null(log_transform))
{ #"If someone inputs a list of variables to be transformed, then..."
trans <- function(df) {
df[[ log_transform]] <- sapply(log_transform, function(x) {
#"...apply a log transformation to each variable..."
log(df[[x]] + 1)
} )
llply(df_list, trans)
#"...for each dataframe in df_list."
}
#etc
} }