as.formula不喜欢等价性'=';(未找到对象)

as.formula不喜欢等价性'=';(未找到对象),r,dataframe,formula,R,Dataframe,Formula,考虑下面的例子 df1 <- data.frame(a=c(1,2,3),b=c(2,4,6)); transform(df1,c=a+b) a b c 1 1 2 3 2 2 4 6 3 3 6 9 然而,R说 Error in eval(expr, envir, enclos) : object 'b' not found 使用“~”作为左侧和右侧的分隔符时,不会出现此错误。我可以推迟公式的评估吗?在作业中是否可以使用as.formula?我试过摆弄“with”

考虑下面的例子

df1 <- data.frame(a=c(1,2,3),b=c(2,4,6));
transform(df1,c=a+b)
    a b c
  1 1 2 3
  2 2 4 6
  3 3 6 9
然而,R说

Error in eval(expr, envir, enclos) : object 'b' not found

使用“~”作为左侧和右侧的分隔符时,不会出现此错误。我可以推迟公式的评估吗?在作业中是否可以使用as.formula?我试过摆弄“with”,但没有用。

我已经解决了你在评论中提到的问题,因为这似乎是你真正的目标。这样可以避免弄乱原始问题中的公式

数据集的可复制版本

group_names <- apply(
    expand.grid("X", c("X", "O", "Y"), c("A", "B", "C"), "_", 0:9, 0:9),
    1,
    paste,
    collapse = ""
)
n_groups <- 50
n_points_per_group <- 10
df1 <- as.data.frame(matrix(
    runif(n_points_per_group * n_groups),
    ncol = n_groups
))
colnames(df1) <- sample(group_names, n_groups)
根据第二个字符和数字匹配的条件定义分组

melted_df1$group <- with(melted_df1, paste(
    substring(variable, 2, 2),    
    substring(variable, 5, 6),
    sep = ""
))

我想你希望它们是表达式而不是公式。但是,看起来您将在
eval(parse(text=“whatever”)
上遇到一些变化,这将导致可怕的、可怕的代码和难以找到的bug。如果可能的话,试着做一些不那么聪明的事情。最好将字符串分割成等号。在左边,你可以看到类似于
df1[[“c”]]的东西,在我真正的问题中,它也不是自动完成的关键。我只有大约50个栏目,名称属于“X[XOY][ABC][0-9][0-9]”类别,例如“XXA\u 05”。现在,我想对所有具有相同“X[XOY]”类型和相同数字的列进行平均,例如“XXA_00”和“XXB_00”,并将其保存到这些列中的第一列。当然,这也可以在列级别上通过将正确的列变灰来完成。我只是偶然遇到了公式问题,想知道是否有可能将其实现为公式。不要使用转换。这是一个辅助函数,适合交互使用,不适合编程。你能详细说明一下吗?所以我应该使用eg-df[[col1]]
melted_df1 <- melt(df1)
melted_df1$group <- with(melted_df1, paste(
    substring(variable, 2, 2),    
    substring(variable, 5, 6),
    sep = ""
))
with(melted_df1, tapply(value, group, mean))