R:在函数中使用时,从tracemem中移除视觉杂波

R:在函数中使用时,从tracemem中移除视觉杂波,r,function,trace,clutter,R,Function,Trace,Clutter,TraceMe正在做我需要它做的事情,但它也会产生分散注意力的视觉混乱。下面是一个简单的例子 a<-1 b<-2 dummyfunction<-function(x,y){return(sum(x,y))} dummyfunction(a,b) [1] 3 当它们没有被复制时,尽管函数仍然可以工作,但它会释放出一堆令人困惑的信息 dummyfunction2(a,b) tracemem[0x0000000009824470 -> 0x000000000a7ced80]

TraceMe正在做我需要它做的事情,但它也会产生分散注意力的视觉混乱。下面是一个简单的例子

a<-1
b<-2

dummyfunction<-function(x,y){return(sum(x,y))}
dummyfunction(a,b)
[1] 3
当它们没有被复制时,尽管函数仍然可以工作,但它会释放出一堆令人困惑的信息

dummyfunction2(a,b)
tracemem[0x0000000009824470 -> 0x000000000a7ced80]: match %in% dummyfunction2 
tracemem[0x0000000009824500 -> 0x000000000a7cedb0]: match %in% dummyfunction2 
tracemem[0x0000000009824500 -> 0x000000000a7cef90]: match %in% dummyfunction2 
tracemem[0x0000000009824470 -> 0x000000000a7cc1a8]: match %in% dummyfunction2   
[1] 3
我希望说服非R用户尝试使用函数来解决这个问题,这样的输出肯定会吓跑他们

在不消除潜在信息警告的情况下,消除这种视觉混乱的最简单方法是什么。函数的其他部分中可能出现的etc?

不要使用
traceem()
。相反,您可以尝试
pryr::address()
只返回输入的内存地址

devtools::install_github("hadley/pryr")

library(pryr)

x <- 1:10
y <- x

address(x)
## [1] "0x100a568c8"
address(y)
## [1] "0x100a568c8"
devtools::install_github(“哈德利/普赖尔”)
图书馆(普赖尔)
x来自:

“此函数用于标记对象,以便在内部代码复制对象时打印消息。”

您可以将untracemem插入函数以绕过它:

dummyfunction3<-function(x,y){
if (tracemem(x)==tracemem(y)){return("Input vectors are identical")}
untracemem(x)
untracemem(y)
if(sum(x %in% y)>=length(x) & sum(y %in% x)>=length(y)){print("Something something.")}
return(sum(x,y))}
dummyfunction3=length(x)&sum(y%in%x)>=length(y)){print(“某物”)}
返回值(和(x,y))}
输出:

a <- 1
b <- 2
dummyfunction3(a,a)
# [1] "Input vectors are identical"
dummyfunction3(a,b)
# [1] 3
a
dummyfunction3<-function(x,y){
if (tracemem(x)==tracemem(y)){return("Input vectors are identical")}
untracemem(x)
untracemem(y)
if(sum(x %in% y)>=length(x) & sum(y %in% x)>=length(y)){print("Something something.")}
return(sum(x,y))}
a <- 1
b <- 2
dummyfunction3(a,a)
# [1] "Input vectors are identical"
dummyfunction3(a,b)
# [1] 3