【发布时间】:2016-01-24 09:41:40
【问题描述】:
感谢您提供帮助。我很高兴在所有 R 轻罪上得到纠正。
我不确定我之前的帖子是否完全清楚,所以我希望澄清一下:
在 R 控制台中,我对 .R 文件的调用“使用源 (etc)” .R 文件中的代码使用变量(例如“提取的信息”)ex1、ex2、ex3。这些可能包含从文本中提取的字符串或(一串)数字。
根据您的指导,我已将我的函数重命名为“重置”(并且 ?reset 表示没有其他事件)在范围内。我从函数外部传递了 x 和 y : #发送变量 ex1, ex2, ex3 连同 location, loc 和 parse, prs 被重置为 0 reset(x
reset<-function(x,y){
print(c("resetting ",x," with ", y))
if (length(x) == length(y)) {x <- y
print(paste(x,"=",y),sep="") #both x and y should now be equal (to y)
} else {
paste("list lengths differ: x=",length(x)," y=",length(y),sep="")
}
}
现在 x 和 y 都是 0 但 ex1、ex2 和 ex3 仍然包含以前的值 我希望 ex1、ex2 和 ex3 在用于后续代码部分之前都为 0,因此它们不会用以前的值污染提取的数据,例如:
loc<-str_locate(data[i],"=")
prs<-str_locate(data[i],",")
#extract data from the end of loc to before the occurrence of prs
ex1<-str_sub(data[i],loc[2]+1,prs[1]-1)
#cleanup
#below is simplified for example;
#in reality I wish to send ex1:ex(n) to be reset with values val1:val(n)
期望的结果是回到 Rconsole >ex1 现在应该返回 0。
希望您能理解我的困境并可能有所帮助。
假设我的代码使用一些变量来保存使用 Stringr str_sub 从字符串中提取的数据。这些变量是临时的,因为我使用这些值来构造其他字符串,然后它们应该被释放以用于即将进行的测试:即 if (test==true){extract
对于以后的测试,我想要 extract==0;很简单,但是我有其中的一些,并且想一口气完成。
我用过for循环,但如果有更简单的方法,请指出。
我的尝试是使用一个函数:
#For variables loc, prs, ex1 and x2, set all values to 0
x<-assign(x<-c(loc, prs, ex1, ex2),y<-rep(c(0),length(x)))
#Function
assign <- function(x, y) {
if(length(x)==length(y)){
for (i in 1:length(x)){x[i]<-y[i]}
print(c("Assigned",x[i]))
return (x)
} else { print (c("list lengths differ: x=",length(x)," y=",length(y)))
}
}
问题在于这将 x 返回为 0,但变量列表保留了它们的值。
我对 r 和 SO 都有点小白,所以虽然我在很多场合都从 SO 的丰富建议中受益,但这是我的第一个问题,所以请保持温和。我已经搜索了这个问题,但现在几个小时还没有找到我需要的东西。希望你能帮忙。
【问题讨论】:
-
已经有一个名为“assign”的函数。您可能会发现它很有用,但无论如何您可能不想更改它。