我正在嘗試將一個Tibble轉換爲函數調用的參數列表。我這樣做的原因是因爲我想創建一個簡單的文件說明Tibble,用於讀取具有不同列的多個固定寬度文件。這樣我只需要使用pull和select來指定文件中的哪些列,然後我就可以自動地加載和解析文件。但是,我遇到了使用cols對象指定列格式的問題。將Tibble轉換爲參數列表
對於這個例子讓我們假設我有格式的Tibble:
> (filespec <- tibble(ID = c("Title", "Date", "ATTR"), Length = c(23, 8, 6), Type = c("col_character()", "col_date()", "col_factor(levels=c(123456,654321)")))
# A tibble: 3 x 3
ID Length Type
<chr> <dbl> <chr>
1 Title 23 col_character()
2 Date 8 col_date()
3 ATTR 6 col_factor(levels=c(123456,654321)
我想用格式的COLS對象落得:
> (cols(Title = col_character(), Date = col_date(), ATTR=col_factor(levels=c(123456,654321))))
cols(
Title = col_character(),
Date = col_date(format = ""),
ATTR = col_factor(levels = c(123456, 654321), ordered = FALSE)
)
從其他的問題,我已閱讀我知道這可以通過do.call完成。但我無法弄清楚如何以自動方式將列ID和類型轉換爲cols對象。下面是我試過的例子...
> do.call(cols, select(filespec,ID, Type))
Error in switch(x, `_` = , `-` = col_skip(), `?` = col_guess(), c = col_character(), :
EXPR must be a length 1 vector
我假設的選擇需要與執行行參數映射另一個函數來包裝,這是怎麼完成的?
你可能能夠用do.call做到這一點,但是你的代碼並不能遠程做你想做的事 - 你需要先理解do.call在你之前實際做了些什麼可以使用它。 –
我是R新手,所以這都是一種學習體驗。我想我明白do.call做了什麼,它調用一個函數,其他參數作爲參數。根據我對下面答案的評論,我認爲在這裏逃避的是如何以自動化的方式創建一個命名列表。我不想手動輸入所有的field = type參數,我把它們分成兩列,我只想讓R爲我創建指定的列表。 – RandomString
是的,你實際上在你的問題描述中發現。從你的問題來看,你似乎沒有理解這一點。但是這部分問題實際上可以通過'setNames'方便地解決。另一個更大的問題是你的參數是字符串,而不是代碼。因此,你首先需要對它們進行評估,儘管這是可能的(通過解析/評估),但它很混亂,可能不是一個好主意(以及你的情況)。喬蘭的方法是優越的。 –