簡體   English   中英

Windows 10中RStudio的環境問題

[英]Environment problem with RStudio in Windows 10

我已經使用R多年了,並認為自己在R方面相當流利(盡管公認地仍在努力應對代碼中的優雅概念)。 話雖這么說,但我現在遇到了我以前從未遇到過的問題,我認為這可能與我的新計算機或Windows 10本身有關。 為了說明,我的工作最近為我提供了一台功能更強大的計算機,但是它運行的是Windows 10,而不是以前擁有的Windows 7 Professional。

盡我所能,我仍然可以在.GlobalEnv中使用變量(逐行操作),沒有問題,但是如果我嘗試在已編寫的函數中運行進程,則我將在函數被隨機遺忘,並且為我提供(例如)錯誤“錯誤eval(parse(text = i)):找不到對象'i'”,即使'i'的編碼為“ for(i in vars )”。

最重要的是,我已經測試了我的一些較舊的函數,這些函數會常規使用這些進程,並且它們在本機上拋出了我以前的函數中不存在的錯誤。

這是Windows 10的兼容性問題嗎? 可能與OS如何在線程之間拆分R進程有關嗎? 有人有什么主意嗎?

我將提供引發錯誤的代碼片段。 如果其他人可以復制它,並告訴我他們認為錯誤在哪里,我將不勝感激。

謝謝!

adonis.tbl <- function(dist, meta, vars){
  # where dist is a distance matrix of samples with distances based on 
  # community composition, meta is a table with metadata, 
  # and vars is a list of variables in meta, given as character strings
  # row.names in dist must match the corresponding sample names in meta, 
  # named 'SampleID' in the metadata table
  require(vegan)
  out <- data.frame()
  for (i in vars){
    ado <- adonis2(dist ~ eval(parse(text=i)),
                   data=meta[which(row.names(dist)%in%meta$SampleID),])
    out1 <- data.frame(R2=ado$R2[1], p=ado$`Pr(>F)`[1])
    out <- rbind(out, out1)
  }
  row.names(out) <- vars
  return(out)
}

另外,這是一些偽代碼,可通過上述功能重現錯誤。

dat <- matrix(runif(150, 1, 1000), 15, 10, dimnames=list(letters[1:15], LETTERS[6:15]))

tree <- ape::rtree(10, tip.label=LETTERS[6:15])

dist <- GUniFrac::GUniFrac(dat, tree, 0)

bdist <- dist$unifracs[,,2]

meta <- data.frame(SampleID=letters[1:15], 
                   var1=round(runif(15, 1, 5000)), 
                   var2=round(runif(15, 1, 1000)), 
                   var3=round(runif(15, 1, 500)))

test <- adonis.tbl(bdist, meta, c("var1", "var2", "var3"))

我不能說為什么在沒有更多工作的情況下問題就會發生,但是幾乎總是有一個比eval(parse(...))更強大的解決方案。 在這種情況下, reformulate()似乎可以工作(我從下一行中刪除了顯然多余的which() ,但這無關緊要):

ado <- adonis2(reformulate(i,response="dist"),
               data=meta[row.names(dist)%in%meta$SampleID,])

我得到NA / NaN結果,但是我想那是因為這里的樣本數據集是微不足道的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM