SORU
27 HAZİRAN 2014, Cuma


Karşı ayrıştırmak & eval kaynağı kullanarak uyarılar nelerdir?

Kısa versiyon

Değiştirebilir miyim

source(filename, local = TRUE, encoding = 'UTF-8')

ile

eval(parse(filename, encoding = 'UTF-8'))

kırılma riski olmadan, UTF-8 kaynak yapmak için Windows üzerinde çalışan dosyalar?

Uzun versiyon

Şu anda üzerinden belirli bir kaynak dosya yükleme duyuyorum

source(filename, local = TRUE, encoding = 'UTF-8')

Ancak, this does not work on Windows, nokta olduğu bilinmektedir.

Geçici bir çözüm, Joe Cheng suggested yerine kullanarak

eval(parse(filename, encoding = 'UTF-8'))

Bu oldukça iyi iş gibi görünüyor1ama source, kaynak kodu danıştıktan sonra bile önemli bir ayrıntı farklıdır anlamıyorum:

Her iki source sys.sourcedeğilsadece parse eval dosya içeriğini o zaman. Bunun yerine, dosya içeriği ve onlar ayrıştırmakyineleme el ileüzerinde ayrıştırılmış ifadeler ve eval teker teker. Ben anlamıyorum bunun için gerekli sys.source (source en az kullandığı için Haritayı ayrıntılı tanılama, talimat; ama sys.source MU nothing of the kind):

for (i in seq_along(exprs)) eval(exprs[i], envir)

evalıng ifadeleri ayrı ayrı amacı nedir?Ve neden bunun yerine doğrudan alt ifadeler endekslerini üzerinden yineleme mi? Diğer uyarılar nelerdir?

Netleştirmek için: bendeğilsource ve seçenekleri ile ayarlanmış olabilir bazı parse ek parametreler hakkında endişeli.


1source parse kodlama tarafından takıldı sebebi source giriş metni dönüştürmeye çalışır aslında aşağı kaynar değil. parse öyle bir şey yok, dosyanın bayt içerik olarak-okur ve sadece bellekte UTF-8 Encoding onun işaretleri.

CEVAP
9 NİSAN 2015, PERŞEMBE


Bu öncelikle soru seq_along bölüm adres olarak tam bir cevap değil, yorum olarak eklemek için çok uzun.

Bir anahtar arasındaki fark seq_along ardından [ vs sadece kullanma for i in x yaklaşım (ki inanıyorum olacak benzer seq_along ardından [[ yerine [) eski korur ifade. Burada farkı göstermek için bir örnek:

> txt <- "x <- 1   1
  # abnormal expression
    2 *
      3
  "
> x <- parse(text=txt, keep.source=TRUE)
> 
> for(i in x) print(i)
x <- 1   1
2 * 3
> for(i in seq_along(x)) print(x[i])
expression(x <- 1   1)
expression(2 *
    3)

Alternatif olarak:

> attributes(x[[2]])
NULL
> attributes(x[2])
$srcref
$srcref[[1]]
2 *
    3

Bu eval(parse(..., keep.source=T)), karşılaştırırken herhangi bir pratik etkisi olup olmadığını sadece olabilir diyebilirim, ama öyle bir durum düşünemiyorum.

Ayrı ayrı ifade gömmeyi de makul yararlı olabilecek srcref iş alt yol, not (...mı acaba?).

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • case LianLi

    case LianLi

    28 Mayıs 2010
  • gsipek

    gsipek

    20 Temmuz 2007
  • VideoGamePervert

    VideoGamePer

    30 AĞUSTOS 2008