带键值的R中的For循环
R中的等效方式是什么带键值的R中的For循环,r,loops,R,Loops,R中的等效方式是什么 foreach ($arr as $key => $value) { echo "Key: $key; Value: $value<br />\n"; } foreach($arr as$key=>$value){ echo“Key:$Key;Value:$Value\n”; } 这意味着 arr<-c(a=1,b=2,c=3) key<-names(arr) val<-arr for(i in 1:length(arr)){
foreach ($arr as $key => $value) {
echo "Key: $key; Value: $value<br />\n";
}
foreach($arr as$key=>$value){
echo“Key:$Key;Value:$Value
\n”;
}
这意味着
arr<-c(a=1,b=2,c=3)
key<-names(arr)
val<-arr
for(i in 1:length(arr)){
print(paste(key[i],val[i]))
}
arrR喜欢将事物矢量化。你可以做:
sprintf("Key: %s; Value: %s", names(arr), arr)
# [1] "Key: a; Value: 1" "Key: b; Value: 2" "Key: c; Value: 3"
或者,要获得更好的输出,请将其通过cat
:
cat(sprintf("Key: %s; Value: %s", names(arr), arr), sep = "\n")
# Key: a; Value: 1
# Key: b; Value: 2
# Key: c; Value: 3
使用,您可以编写:
foreach(key=names(arr), val=arr) %do% print(paste(key,val))
您可以定义自己的forkeyval
函数:
forkeyval = function(arr, .combine=function(...){NULL}, ...) {
foreach(key=names(arr), val=arr, .combine=.combine, ...) }
这让你可以写:
forkeyval(arr) %do% print(paste(key,val)
假设var
是一个键值对列表,可以使用以下代码段实现更通用的foreach循环:
for(key in names(var)){
value<-var[key]
print(paste(key,'=',value))
}
for(输入名称(var)){
value您还可以使用软件包中的kv()
。它非常轻,与基本的R语法几乎没有区别
for( . in kv(arr) ) {
cat( "Key:", .$k, "Value:", .$v, "<br />\n" )
}
(.in-kv(arr))的{
类别(“键:,.k,.v,,.v,
\n”)
}
披露:我写了kv我看到的唯一区别是输出的格式不同,可以通过在paste()中使用字符串参数轻松修改
。如果不是这样,问题似乎并不完全清楚。我不明白。您提供的代码也会生成键值对?那么缺少什么?@Dr.Mike:我想他正在寻找一种更优雅的方法来编写这个循环。@f3lix-thx为了您的理解,我已经学习了R。我通过编写代码的过期时间是我经常想到的在PHP和Java这样的语言中,如果我需要一个lappy,我现在看到在for循环中做它的不同之处,我知道循环在向量语言中是不好的。我知道最好用向量来思考,但是计算更复杂,mybe你可以给出一个更好的解决方案,我会决定我是否可以用这个原理来解决这个问题我现在在做什么。你链接到的是一个完全不同的问题。对于你在这里所说的,我提供了我和大多数人会考虑的正确答案。当你开始掌握R时,也许你会意识到它不是“更复杂”。但恰恰相反:更少的按键,更少的函数调用,它会运行得更快。从更一般的角度看链接,在第2点下也是一样的)。虽然我喜欢foreach软件包,但我认为我的软件包为OP问题提供了一个更自然的语法解决方案。