R中的基本自定义函数没有定义内部对象[关闭]
Posted
技术标签:
【中文标题】R中的基本自定义函数没有定义内部对象[关闭]【英文标题】:Basic custom function in R does not define the internal objects [closed] 【发布时间】:2013-01-09 02:47:01 【问题描述】:我正在尝试创建一个函数来自动化一些基本计算。然而,它似乎没有定义最终的mat
对象,即使嵌入到函数中的代码在放置在它之外时也能完美运行。显然我犯了一些基本错误,但我不知道出了什么问题。
代码是:
my_f = function(covs, B, k)
### empty matrix
coeff <- paste("b_", covs, sep="")
se <- paste("se_", covs, sep="")
mat <- matrix(nrow=B, ncol=2+2*k, dimnames=list(c(), c("sim","N",coeff,se)))
mat[,"sim"] <- seq(1:B)
my_f(covs=list("x1", "x2"), B=50, k=2)
感谢您的帮助!
【问题讨论】:
在什么情况下不起作用?你期待什么输出而不是它给你什么? @joran:确实最后一行会破坏函数,但它会准确返回seq(1:B)
,因为这是[<-
将返回的内容。
@Dwin,是的,但除非您将 my_f(...)
分配给某些东西,否则它似乎不会返回。比较 my_f(covs=list("x1", "x2"), B=50, k=2)
和 x <- my_f(covs=list("x1", "x2"), B=50, k=2);x
鉴于您对以下答案的评论,您是否要将 mat
分配给父(全局或其他)环境?
@DWin:您认为seq(2:B)
与2:B
不同(或任何非1:X
形式的向量,其中X > 0
)-seq
给定一个参数,使用向量的 length,然后返回一个长度为 1 的向量。因此,由于1:B
的长度为B
,seq(1:B)
返回1:B
【参考方案1】:
虽然不清楚您希望它返回什么,但我认为您忘记了函数末尾的 return(mat)
行。
由于当前定义了myf
,它将只返回最后评估的东西m[, "sim"]
,它是一个向量(因此忘记了矩阵的其余部分)。
您还必须将my_f
的结果分配给一个变量(可以是,但不一定是,也称为mat
)。
mat <- my_f(covs=list("x1", "x2"), B=50, k=2)
【讨论】:
谢谢!你能解释一下如何定义mat
对象而不必在 R 控制台上显示它吗?我想稍后再调用它
当mat
在函数中定义时,它只存在于该函数的范围中。这意味着函数完成的那一刻,mat
消失了——除非它返回 mat
,并且函数的返回值被分配给一个新变量(也可以称为 mat
)
如果您不想在控制台中看到它,请使用 invisible(mat)
而不是 return(mat)
。
并将函数调用的结果分配给某物。 (这也会产生不打印值的效果。)
感谢大家,你们让我的生活变得轻松多了! :)以上是关于R中的基本自定义函数没有定义内部对象[关闭]的主要内容,如果未能解决你的问题,请参考以下文章