2016-03-23 10 views
1

'daki değerleri atayın. R içerisindeki s4 sınıfları yuvalarına değerleri dinamik bir şekilde atamaya çalışıyorum. Şimdiye kadar sahip olduğum kod aşağıdadır. İç içe geçmiş tür sayısal türüyle biten aşağıdaki iç içe geçmiş sınıfları oluşturuyorum.İç içe yuvalanmış s4 sınıfı yuva adlarını dinamik olarak oluşturun ve R

[email protected]@slot = 1 

ya: Ancak örneğin atama ile için alanı adlarına dinamik oluşturulmasıdır etmek Yapmak istediğim şey

slot([email protected], "slot") <- 1 

setClass('slot', slots = c(slot = 'numeric')) 
setClass('object', slots = c(slot = 'slot')) 
object = new('object') 
[email protected]@slot 

Tipik assignement beklendiği gibi çalışır örneğin bir vektörden yapıştırın eval ve ayrıştırma kullanma

slot_path = c("object", "slot", "slot") 

nesnesine dizeyi dönüştürmek için hile yapar ve bana nesneyi gösterir ya da burada bu durumda nesnenin yuvasına. Bununla birlikte, bu tür yapılara değerler atamak, beklendiği gibi çalışmaz gibi görünmektedir.

Error in file(filename, "r") : cannot open the connection.

Ben böyle yolu elle yapıştırırsanız:

Error in eval(parse(text = "[email protected]@slot")) <- 1 : target of assignment expands to non-language object

:

eval(parse(text = "[email protected]@slot")) <- 1 

ben diyor hata alıyorum

eval(parse(text = paste(slot_path, collapse="@"))) <- 2 

bana diyor hata verir

ile atama yapmaya çalışılıyorişlevi de hile yapmaz. Aşağıdaki çağrı:

assign(x = slot(eval(parse(text = "[email protected]")), "slot"), value = 1) 

bana hata verir: bununla Herhangi bir yardım mutluluk duyacağız

Error in assign(x = slot(eval(parse(text = "[email protected]")), "slot"), value = 1) : invalid first argument

. Sayısal için

: karakter için

eval(parse(text = eval(expression(paste(pasted_slot_path, "<-", value))))) 

:

value = sprintf('"%s"',value) 
    eval(parse(text = eval(expression(paste(pasted_slot_path, "<-", value))))) 
+0

yuvası, bir atama yöntemi vardır istediğini olmasıdır – rawr

+0

Çalışmıyor Nope: Yuvada hata (eval (ayrıştırma (text = "object @ slot")), "slot") <- "test": target atama dil olmayan nesneye genişler –

+0

Bu yüzden karmaşık dizeleri için değer atamalarını ele alma gerektiği için atama işlevini kullanıyordum. –

cevap

0

ben bir çözüm buldum? `? yöntemleri :: \` yuva <- \ ``