你能用"R"通过参考吗?例如,在以下代码中:
setClass("MyClass",
representation(
name="character"
))
instance1 <-new("MyClass",name="Hello1")
instance2 <-new("MyClass",name="Hello2")
array = c(instance1,instance2)
instance1
array
instance1@name="World!"
instance1
array
Run Code Online (Sandbox Code Playgroud)
输出是
> instance1
An object of class “MyClass”
Slot "name":
[1] "World!"
> array
[[1]]
An object of class “MyClass”
Slot "name":
[1] "Hello1"
[[2]]
An object of class “MyClass”
Slot "name":
[1] "Hello2"
Run Code Online (Sandbox Code Playgroud)
但我希望如此
> instance1
An object of class “MyClass”
Slot "name":
[1] "World!"
> array
[[1]]
An object of class “MyClass”
Slot "name":
[1] "World!"
[[2]]
An object of class …Run Code Online (Sandbox Code Playgroud) 我正在用R开发一个包.我有一堆函数,其中一些需要一些全局变量.如何管理包中的全局变量?
我已经阅读了一些关于环境的内容,但我不明白它是如何工作的,如果这就是解决问题的方法.
我跟着这里的讨论,很好奇为什么<<-在R中使用它不赞成它会引起什么样的混乱?
我也想要一些关于如何避免的提示<<-.我经常使用以下内容.例如:
### Create dummy data frame of 10 x 10 integer matrix.
### Each cell contains a number that is between 1 to 6.
df <- do.call("rbind", lapply(1:10, function(i) sample(1:6, 10, replace = TRUE)))
Run Code Online (Sandbox Code Playgroud)
我想要实现的是将每个数字减少1,即所有2s将变为1,所有3将变为2等等.因此,一切n都会到来n-1.我通过以下方式实现这一目标:
df.rescaled <- df
sapply(2:6, function(i) df.rescaled[df.rescaled == i] <<- i-1))
Run Code Online (Sandbox Code Playgroud)
在这种情况下,我该如何避免<<-?理想情况下,我希望能够将sapply结果传递到另一个变量:
df.rescaled <- sapply(...)
Run Code Online (Sandbox Code Playgroud) 我想制作一个基本的分析工具,收集时间戳并用注释产生运行时间.唯一的问题是我无法在不使用全局变量的情况下弄清楚如何做到这一点.实现我想要实现的功能的"正确"方法是什么?如果R已经内置了这个功能,那真是太棒了,但我真正想要弄清楚的是如何避免使用全局变量并编写更强大的代码.
timeStamps = c()
runTimes = list()
appendRunTimes <- function(note) {
if(length(timeStamps) < 1) {
timeStamps <<- Sys.time()
}
else {
timeStamps <<- c(timeStamps, Sys.time())
diff <- timeStamps[length(timeStamps) ] - timeStamps[length(timeStamps) - 1]
runTimes <<- c(runTimes, format(diff))
names(runTimes)[length(runTimes)] <<- note
}
}
appendRunTimes('start')
Sys.sleep(4)
appendRunTimes('test')
Run Code Online (Sandbox Code Playgroud) 我在R工作,我想做,例如,
printx <- function() {
x <- 1
printy()
return(x)
}
printy <- function() {
print(x)
}
Run Code Online (Sandbox Code Playgroud)
因为我不想继续传递大量的变量(同样,全球环境中也没有x).有没有办法做到这一点?所有功能都可以访问全局环境,但功能环境与全局环境之间的功能如何?
我们有
=
< -
<< -
有人能解释他们到底做了什么吗?如果还有?当我使用<< - 时,它似乎弄乱了我的函数,但是,我想要全局声明事物,所以当函数完成时我有它们(我不想从函数中返回它们因为我正在优化某些东西其他)