簡體   English   中英

將函數放入數據框

[英]Putting functions into a data frame

似乎可以在R中分配一個函數向量,如下所示:

F <- c(function(){return(0)},function(){return(1)})

這樣就可以像這樣調用它們:(例如) F[[1]]()

這給我的印象是我可以做到這一點:

DF <- data.frame(F=c(function(){return(0)}))

導致以下錯誤

as.data.frame.default(x [[i]],可選= TRUE)中的錯誤:無法將類““ function”“強制轉換為data.frame

這是否意味着不可能將函數放入數據幀? 還是我做錯了什么?

不,您不能直接將函數放入數據框中。

但是,您可以預先定義功能並將其名稱放入數據框中。

foo <- function(bar) { return( 2 + bar ) }
foo2 <- function(bar) { return( 2 * bar ) }
df <- data.frame(c('foo', 'foo2'), stringsAsFactors = FALSE)

然后使用do.call()使用以下功能:

do.call(df[1, 1], list(4))
# 6

do.call(df[2, 1], list(4))
# 8

編輯

只要您具有命名函數,上述變通方法都將起作用。

問題似乎是R視對象為函數的類,為as.data.frame() as.data.frame.function() )查找適當的方法,但找不到它。 這將導致對as.data.frame.default()的調用,該調用必須是對帶有您報告的消息的stop()調用的包裝。

簡而言之,他們似乎只是沒有為該課程實施它。

雖然不能將函數或其他對象直接放入data.frame中,但如果通過矩陣,則可以使其起作用。

foo <- function() {print("qux")}
m <- matrix(c("bar", foo), nrow=1, ncol=2)
df <- data.frame(m)
df$X2[[1]]()

產量:

[1] "qux"

df的內容如下所示:

  X1                                   X2
1 bar function () , {,     print("qux"), }

我不知道為什么這在直接路徑無效的情況下起作用。 我懷疑在任何生產代碼中這樣做都是一件“壞事”。

暫無
暫無

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

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