gpt4 book ai didi

r - 如何在 R 函数内部运行效果图

转载 作者:行者123 更新时间:2023-12-04 18:10:13 25 4
gpt4 key购买 nike

更新:以前的标题是 Is there any specific way to pass data frame as an argument to a function?但据这里的聪明人说,这不是正确的问题。原帖如下。

当我使用 somefunc(sleepstudy) 运行以下函数时,

somefunc<-function (dataLme) 
{
library(effects)
library(lme4)

fm8 <- lmer(Reaction ~ 1 + Days + (1 + Days|Subject), dataLme,
REML = 0, verbose = TRUE)

plot(effect("Days",fm8))
}

我有一个错误。
Error in plot(effect("Days", fm8)) : 
error in evaluating the argument 'x' in selecting a method for function 'plot': Error in is.data.frame(data) : object 'dataLme' not found

但是如果我手动执行
library(effects)
library(lme4)
fm8 <- lmer(Reaction ~ 1 + Days + (1 + Days|Subject), sleepstudy,
REML = 0, verbose = TRUE)
plot(effect("Days",fm8))

我没有收到任何错误。

我认为 R 通过值传递意味着将整个对象内容复制到函数参数。但看起来我并不完全正确。任何人都可以解释发生了什么?

最佳答案

一个(hacky)解决方法是分配 dataLme进入全局环境,其中effect()将能够找到它:

library(effects)
library(lme4)

somefunc <- function (dataLme) {
## Assign to a symbol that's unlikely to be in use in .GlobalEnv
## (and make sure this function cleans up after itself!)
assign(".TeMpVaR", dataLme, envir=globalenv())
on.exit(rm(.TeMpVaR, envir=globalenv()))

fm8 <- lmer(Reaction ~ 1 + Days + (1 + Days|Subject), .TeMpVaR,
REML = 0, verbose = TRUE)
plot(effect("Days",fm8))
}

somefunc(sleepstudy)

关于r - 如何在 R 函数内部运行效果图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15885291/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com