2013-09-02 1 views
2

Что является эквивалентом путь в R дляДля контура в 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])) 
} 
+1

Единственное различие, которое я см., что ваш вывод форматируется по-разному, и его легко изменить с помощью строковых аргументов в 'paste()'. Если это не так, вопрос кажется не совсем ясным. –

+0

Не понимаю. Код, который вы предоставили, также генерирует пару значений ключа? Итак, чего не хватает? –

+0

@ Dr.Mike: Я думаю, он ищет более элегантный способ написать этот цикл. – f3lix

ответ

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) 
3

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 
+0

Я знаю, что лучше подумать в векторах, но расчет более сложный, mybe вы можете дать лучшее решение для [этого] (http://stackoverflow.com/questions/18571595/passed-through-a- xml-tree-and-replace-objects), и я решу, могу ли я использовать этот принцип для решения, что я делаю сейчас. – Klaus

+0

То, на что вы ссылаетесь, - совершенно другая проблема. За то, что вы здесь задали, я представил то, что я и большинство людей рассмотрят правильно. Когда вы начнете освоить R, возможно, вы поймете, что это не «сложнее», а наоборот: меньше клавиш, меньше вызовов функций, и он будет работать быстрее. – flodel

+0

Посмотрите на ссылку более общим способом, так же как и в пункте 2). – Klaus

0

Предполагая var список пар ключ-значение, более общий цикл Еогеасп может быть достигнуто с помощью следующего фрагмента кода:

for(key in names(var)){ 
    value<-var[key] 
    print(paste(key,'=',value)) 
} 
Смежные вопросы