我正在使用参数lm()执行formula、data、na.action和weights。我的权重存储在一个数字变量中。
formula = "Response~0+.")时,我得到了一个错误,即权值不是适当的长度(即使是这样)。formula = Response~0+.)时,函数工作得很好。我在lm()文档中偶然发现了这句话:
所有权重、子集和偏移量的计算方法与公式中的变量相同,即先在数据中计算,然后在公式环境中计算。
这对我来说很难理解,但我感觉到它包含了我问题的答案。
发布于 2011-07-29 20:46:06
(这与你遇到的真正问题没有任何关系,DWin已经谈到了这一点,你的问题上的评论员也提到了这一点,但作为对你引用的部分文档的解释)
引用的帮助信息意味着,用于在模型公式中查找变量/对象引用的过程与查找提供给参数权重、子集等的变量/对象的过程相同。
R查找公式中引用的对象以及参数权重、子集和偏移量,首先在数据对象中,然后在公式的环境中(通常是交互使用期间的全局环境)。
文档之所以明确提到这一点,是因为lm()和许多使用模型公式接口的R函数一样,使用所谓的标准非标准计算。结果是,假设一个人提供了weights = foo,R不一定会在评估论点时寻找对象foo。相反,它将在提供给data参数的对象中查找一个名为data的对象,如果它在那里找不到它,那么在附加到模型公式的环境中(正如前面提到的,并不总是必须是全局环境)。
发布于 2011-07-29 20:06:35
当您构造一个拟为公式的参数时,解析器将“尝试它”。它“期望”论点是一个R意义上的语言调用。它并不期望它是一个由引号分隔的字符串。这就是为什么你会看到人们用粘贴(.)来构造公式参数。但是,通过将字符串或更正确的“字符对象”作为as.formula()的参数来完成它们。返回的内容被赋予了一个“公式”类和一个“调用”模式:
> class( as.formula("Y ~ x") )
[1] "formula"
> mode( as.formula("Y ~ x") )
[1] "call"s
> class( "Y ~ x")
[1] "character"
> mode( "Y ~ x")
[1] "character"https://stackoverflow.com/questions/6877534
复制相似问题