对于具有键值的R中的循环

时间:2013-09-02 12:08:41

标签: r loops

R到

的等效方式是什么
foreach ($arr as $key => $value) {
    echo "Key: $key; Value: $value<br />\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]))
}

4 个答案:

答案 0 :(得分:3)

使用foreach,您可以写:

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)

答案 1 :(得分:3)

假设var是键值对的列表,可以使用以下代码段实现更通用的foreach循环:

for(key in names(var)){
  value<-var[key]
  print(paste(key,'=',value))
}

答案 2 :(得分:2)

R喜欢对事物进行矢量化。你可以这样做:

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

答案 3 :(得分:0)

您还可以使用kv软件包中的kv()。它非常轻巧,与基本R语法的区别很小。

for( . in kv(arr) ) {
  cat( "Key:", .$k, "Value:", .$v, "<br />\n" ) 
}

披露:我写了 kv