我有以下功能:
s_c <- function(n, t){
r_num <- runif(1,min=0,max=1)
use <- sample(s[,1],1)
use2 <- subset(s,s[,1]==use,2)
use2 <- as.numeric(use2)
ne_s <- sample(subset(s,s[,2]!=use2,2),1)
Return(use)
if (t>50 & r_num<0.5){
ne_s
}
else
0
}
我实际上想在函数外部的命令中使用函数中创建的变量,所以我想在函数外部引用变量的意义上“返回”
问题2:
如果我想在if语句中进行分配,例如
,该怎么办? if (t>50 & r_num<0.5){
s[,4]=use
}
可以这样做吗?
答案 0 :(得分:4)
马修提到的“清单”解决方案:
.....
list(variable1 = VarInFunction,
variable2 = VarInFunction2)
像这样,当你运行你的功能时,你可以存储它的结果。
Result <- s_c(10,1)
然后您可以特别询问结果:
Result$variable1
Result$variable2
请注意,VarInFunction
是在函数中调用的变量,并重命名为variable1
(或任何您想要的),并存储在Result
中。
答案 1 :(得分:3)
虽然您应该将这两个值作为列表返回,但您可以非常轻松地影响父级环境。
替换它:
Return(use)
用这个:
use <<- use
对于您的编辑,您可以使用以下语法:
s[,4] <<- use
注意:父母的环境&#34;不是调用函数的环境。它是定义函数的环境。出于这个原因,R中的函数被称为闭包。明确地:
s_c <- function() {
use <<- 1
}
f <- function() {
use <- 0
s_c()
return(use)
}
f()
将返回0. s_c()
正在修改不同的use
变量(在不同的环境中)。