R将值列表分配给对象列表
谢谢您尝试提供帮助。我很乐意纠正所有的R违规行为。R将值列表分配给对象列表
我不知道,我是用我的前面,如下岗位完全清楚,所以我希望澄清:
在R控制台,我的电话“使用源(ETC)”到.R文件 .R文件中的代码使用变量(例如'提取信息')ex1,ex2,ex3。这些可能包含字符串或从文本中提取的(一串)数字。
根据您的指导,我已将函数重命名为“重置”(并且“重置”表示没有其他事件)在范围之内。我通过x和y两个函数: #发送变量ex1,ex2,ex3以及位置,loc和解析,prs被重置为0 重置(x < -c(loc,prs,ex1 ,EX2,EX3)中,y < -rep(C(0),长度(X)))在变量y多次#repeats 0作为有对于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从字符串中提取的数据。这些变量是暂时的,因为我使用这些值来构造其他字符串,然后它们应该被释放以用于即将到来的测试中:即,如果(test == true){提取< -str_sub(字符串,开始,结束)}
对于以后的测试,我想提取== 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
。 base-r中已经有一个,你会产生混淆。
除了它的名字,你的函数还有一些问题。首先,你不需要用for循环来代替x,因为这是一个基本的向量化操作。只需使用x <- y
;其次,你应该在paste
中包装你的信息。
asgn <- function(x, y) {
if(length(x)==length(y)){
## This step is not needed, return(y) is better as @Rick proposed in their now deleted answer
## I am leaving it to show you how the for-loop is not needed
x<-y
return (x)
} else {
print (paste("list lengths differ: x=",length(x)," y=",length(y)))
return(x)
}
}
然后,你的函数调用有几个问题。您可以使用<-
而不是=
指定的参数。它们只是分配变量的同义词,但函数参数是另一回事。最后,你要使用x
是在参数(length(x)
)y
的定义,但是这是不可能的,因为它没有定义,所以它正在寻找在父环境X。你应该length(3)
而不是测试你的功能。
x<-asgn(x=c(loc, prs, ex1, ex2),y=rep(c(0),length(3)))
已经有一个名为“分配”功能。你可能会觉得它很有用,但无论如何你可能不想改变它。 – Rick