本文介绍了从函数返回数据框并将其存储在工作空间中的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述 限时删除!! 这是我与R的第一周工作,有一件事情我似乎无法管理。 c 返回。您可以将其包装在括号中,例如: > x< - 10 > (x [1] 20 这绝对不必要。这就是为什么您的函数在 lapply()(lapply catchches invisible output)中使用时的原因,但是在命令行中使用时不会给出任何(可见)输出。您可以通过以下方式捕获它: > testF(b)> x< - testF(b)> x ab 3 3 b 6 6 b 10 10 b 你的函数中的赋值是没有意义的:你明确地返回 dum ,或者你只是把这个赋值全部放在 更正您的功能 所以,例如,只需使用 split(),您的功能将是: testF< - function(select){ dum< - df [df $ b = select,] return(dum)} 或简单地: testF< - function(select){ df [df $ b = select,] } This is my first week working with R and there is one thing about function I cannot seems to manage.df <- data.frame(a = c(1:10), b = c("a", "a", "b", "c", "c", "b", "a", "c", "c", "b"))testF = function(select) {dum = subset(df, b == select)}lapply(unique(df$b), testF)This function now just prints the the data sets on screen. But I would like to store the results as separate data frames in my workspace. In this example this would give three data frames; a, b and c.Thank for the help. 解决方案 Roland has the correct solution for the specific problem: more than a split() is not needed. Just to make sure: split() returns a list. To get separate data frames in you workspace, you do:list2env(split(df,df$b),.GlobalEnv)Or, using assign:tmp <- split(df,df$b)for(i in names(tmp)) assign(i,tmp[[i]])A word on subsetThis said, some more detail on why your function is plain wrong. First of all, in ?subset you read:Translates to: Never ever in your life use subset() within a function again.A word on returning values from a functionNext to that, a function always returns a result:if a return() statement is used, it returns whatever is given as an argument to return().otherwise it returns the result of the last line.In your case, the last line contains an assignment. Now an assignment also returns a value, but you don't see it. It's returned invisibly. You can see it by wrapping it in parentheses, for example:> x <- 10> (x <- 20)[1] 20This is absolutely unnecessary. It's the reason why your function works when used in lapply() (lapply catches invisible output), but won't give you any (visible) output when used at the command line. You can capture it though :> testF("b")> x <- testF("b")> x a b3 3 b6 6 b10 10 bThe assignment in your function doesn't make sense: either you return dum explicitly, or you just drop the assignment alltogetherCorrecting your functionSo, given this is just an example and the real problem wouldn't be solved by simply using split() your function would be :testF <- function(select) { dum <- df[df$b=select,] return(dum)}or simply:testF <- function(select){ df[df$b=select,]} 这篇关于从函数返回数据框并将其存储在工作空间中的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持! 1403页,肝出来的..
09-06 11:19