如果你read ?help
,它說的load
返回值是:
創建的對象的名字的特徵向量,無形。
這表明(但不可否認並不狀態)的load
命令的真正工作是side-effect,因爲它插入對象到環境中(默認爲當前的環境,常常但並不總是.GlobalEnv
)。您應該立即從您稱爲load(...)
的地方訪問它們。
舉例來說,如果我能在變量猜你可能在你的rda
文件:
x
# Error: object 'x' not found
# either one of these on windows, NOT BOTH
dat = load("C:\\Users\\user\\AppData\\Local\\Temp\\1_29_923-Macdonell.RData")
dat = load("C:/Users/user/AppData/Local/Temp/1_29_923-Macdonell.RData")
dat
# [1] "x" "y" "z"
x
# [1] 42
如果你想他們是未存儲在當前的環境下,你可以建立一個環境把它們放進去。(我用parent=emptyenv()
,但這並不是嚴格要求的。有一些小的分歧,不包括這個選項,沒有一個是驚天動地的。)
myenv <- new.env(parent = emptyenv())
dat = load("C:/Users/user/AppData/Local/Temp/1_29_923-Macdonell.RData",
envir = myenv)
dat
# [1] "x" "y" "z"
x
# Error: object 'x' not found
ls(envir = myenv)
# [1] "x" "y" "z"
從這裏,你可以在任何數量的方式在您的數據得到:
ls.str(myenv) # similar in concept to str() but for environments
# x : num 42
# y : num 1
# z : num 2
myenv$x
# [1] 42
get("x", envir = myenv)
# [1] 42
旁註:
您可能已經注意到,我用dat
作爲我的變量名而不是data
。雖然您當然可以使用它,但如果您使用與現有變量或函數匹配的變量名稱,它會咬你。例如,只要您加載數據,所有代碼都可以正常工作。但是,如果你運行一些代碼沒有預加載你的對象放入data
變量,你可能會得到一個錯誤,如:
mean(data$x)
# Error in data$x : object of type 'closure' is not subsettable
該錯誤信息不會立即不言而喻。問題是如果之前沒有定義在你的問題中,那麼data
這裏指的是函數data
。在規劃方面,一個closure is a special type of function,所以錯誤確實應該這樣說:
# Error in data$x : object of type 'function' is not subsettable
這意味着雖然dat
可以子集和dat$x
意味着什麼,你不能使用$
子方法上的功能本身。 (例如,在提及mean
函數時,不能這樣做mean$x
)。無論如何,儘管這裏修改後的錯誤消息不那麼令人困惑,但它仍然不能清楚地告訴您問題所在的位置。因此,許多經驗豐富的程序員會建議您使用唯一的變量名稱(可能不只是x
:-))。如果您使用我的建議,並將其命名爲dat
代替,那麼不預加載數據的錯誤,而不是將誤差:
mean(dat$x)
# Error in mean(dat$x) : object 'dat' not found
這是很多更有意義,更容易解決。
將您的反斜槓更改爲正斜槓(\ to /)或將\ \替換爲\\ –
或將其更改爲雙反斜槓......嘗試上述代碼時發生了什麼? – r2evans