2013-01-09 28 views
0

我想创建一个函数来自动化一些基本的计算。然而,它似乎没有定义最终的mat对象,即使嵌入到函数中的代码完美的工作,当放在它外面..显然我正在做一些基本的错误,但我无法弄清楚什么是错的。R中的基本自定义函数没有定义内部对象

的代码是:

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) 

感谢您的帮助!

+0

它以什么方式不起作用?你期待什么产出,而不是它给你什么? –

+2

@joran:确实最后一行会破坏函数,但它会完全返回'seq(1:B)',因为这就是'[<-'将返回的内容。 –

+1

@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' – mnel

回答

3

虽然目前还不清楚你希望它返回什么,但我认为你在函数结尾处忘记了行return(mat)

由于当前定义了myf,它将只返回评估的最后一个东西m[, "sim"],这是一个向量(因此忘记了矩阵的其余部分)。

您还可以到my_f结果赋值给一个变量(可以是,但不必是,也叫mat)。

mat <- my_f(covs=list("x1", "x2"), B=50, k=2) 
+0

+1太快了! – mnel

+0

谢谢!你能否解释如何定义'mat'对象而不必在R控制台上显示它?我想稍后调用它。 – Stezzo

+0

当函数中定义了'mat'时,它只存在于该函数的*范围*内。这意味着函数完成的那一刻,'mat'不见了,*除非它返回'mat'并且函数的返回值被分配给一个新的变量(也可以称为'mat') –