Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
带键值的R中的For循环_R_Loops - Fatal编程技术网

带键值的R中的For循环

带键值的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)){

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)){
 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问题提供了一个更自然的语法解决方案。