楼主: johnmy
2334 2

[问答] 关于非数字函数参数传递问题,请教 [推广有奖]

  • 2关注
  • 5粉丝

已卖:702份资源

讲师

37%

还不是VIP/贵宾

-

威望
0
论坛币
6961 个
通用积分
93.6701
学术水平
42 点
热心指数
55 点
信用等级
20 点
经验
8628 点
帖子
562
精华
0
在线时间
374 小时
注册时间
2008-4-10
最后登录
2025-12-27

楼主
johnmy 发表于 2016-10-22 18:12:28 |AI写论文
10论坛币

自己编了一个简单的函数,其中Month是data=airquality中的变量,airquality是R自带的数据。我想调用data中的其他变量对Month做方差分析,如Wind,Temp等,用y做形参传递。估计涉及到NSE吧,可能用到lazyeval包,或substitute函数,但这块一直搞不明白,请高手指教。
#函数
aaov <- function(y)
  {
  ao<-aov(y~Month,data=airquality)
}

#调用
#调用时发现:
>aaov("wind") [url=]Show Traceback[/url]
[url=]Rerun with Debug[/url]

Error in model.frame.default(formula = y ~ Month, data = airquality, drop.unused.levels = TRUE) :   变数的长度不一样('Month')

>aaov(wind) [url=]Show Traceback[/url]
[url=]Rerun with Debug[/url]

Error in eval(expr, envir, enclos) : 找不到对象'wind'


关键词:substitute quality month Error trace function
学习R

沙发
不懂不装懂 发表于 2016-10-25 23:48:55
不知道这样合不合你的原意

> aaov <- function(y)
+ {  airquality$x<-airquality[[y]]
+   aov(x~Month,data=airquality)
+ }
>
> aaov("Wind")
Call:
   aov(formula = x ~ Month, data = airquality)

Terms:
                    Month Residuals
Sum of Squares    59.9702 1826.5836
Deg. of Freedom         1       151

Residual standard error: 3.478014
Estimated effects may be unbalanced
已有 1 人评分论坛币 收起 理由
johnmy + 5 精彩帖子

总评分: 论坛币 + 5   查看全部评分

藤椅
johnmy 发表于 2016-10-26 00:34:15
这倒是一个办法,谢谢
我在SO也问了,他们给的答案也不错。我真正要用的是lmer,但想道理一样,就用aov。
http://stackoverflow.com/questions/40202763/string-argument-in-user-defined-function

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2025-12-30 23:52