我正在尝试使用类似python dict的列表,可以在每次运行函数时附加。最后,我想将该函数应用于数据框中的每一行。我正在尝试一些玩具数据:
foo <- vector(mode="list", length=2)
names(foo) <- c("Larry", "Bob")
myfun <- function(name, round, foo){
foo[[name]] <<- c(foo[[name]], round)
}
当我在某些数据上单独运行时,这是有效的:
myfun("Larry", "R2", foo)
myfun("Larry", "R2", foo)
myfun("Bob", "R1", foo)
myfun("Larry", "R1", foo)
foo
$Larry
[1] "R2" "R2" "R1"
$Bob
[1] "R1"
但是我无法让这个函数在数据框上工作:
datf <- data.frame(name = c("Larry", "Larry", "Bob", "Larry"),
round = c("R2", "R2", "R2", "R1"))
mapply(myfun, name=datf$name, round=datf$round, foo=foo)
这会在控制台中产生以下内容(我不知道为什么?):
[1] 1 1 2 3
以及foo中的以下内容:
foo
$Larry
[1] 2
$Bob
[1] 3
我的另一个想法是尝试在for循环中应用myfun():
for(row in 1:nrow(datf)){
myfun(datf$name, datf$round, foo)
}
但这会产生错误:
Error in foo[[name]] : no such index at level 2
任何见解都将不胜感激!
答案 0 :(得分:0)
您尝试运行的功能的一个更好的示例,结果将有所帮助。我会考虑使用dplyr :: mutate函数。或者,如果您尝试做一些简单的事情,我认为您可以在数据框datf$new <- myfun(inputs)