繁体   English   中英

R:我无法使用do.call将所有data.frame列转换为因子

R: I can't convert all my data.frame columns in factors using do.call

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

我有以下称为训练的data.frame:

event.5    er     her2   lymph   grade
TRUE       TRUE   FALSE  FALSE   3
FALSE      FALSE  TRUE   FALSE   3
...

我想使用以下方式转换因子中的所有列:

training <- do.call(as.factor, training)

但是我收到以下错误:

Error in (function (x):
unused arguments (event.5 = c (TRUE, FALSE,...)

我可以手动将每一列转换为因子,但是我想要更优雅的东西。 我将不胜感激任何建议。 谢谢!

3 个回复

我认为解释错误消息将是最有用的,因为@nicola已经提供了“正确答案”。 do.calllapply之间的区别:

do.call:对第二个参数do.call相匹配的第一个参数(函数)的正式命名参数。 因此,“ event.5”项被提供给as.factor ,并且解释器无法在as.factor的形式参数中as.factor匹配的任何项,从而生成错误。 `do.call的形式列表中没有省略号。

lapply:第一个参数的元素被逐个传递(且未命名)到函数。 有一个可选的省略号机制,允许提供更多的参数,但它们是作为一个整体而不是一个一个地提供的。 这些参数必须被命名,并且名称不能部分匹配。 命名参数甚至可能包含函数形式的第一个参数,因此它是形式中的第一个参数,该参数与从X参数lapply的值匹配。 如果要一一传递多个列表,请查看mapply

@nicola的解决方案还在LHS上放置了"[]" ,以便使用[]<-而不是仅仅使用<- 这具有保留data.frame结构的效果。

由于重新开始投票,我将添加另一种解释do.calllapply之间差异的方法,以补充@BondedDust编写的内容。

do.calllapply使用一个函数和一个列表作为参数(即使顺序不同)。 但是差异很大。

写作

do.call(fun,list)

基本上是相同的:

fun(list[[1]],list[[2]], ... , list[[length(list)]])

您只调用一次fun ,并且listfun的参数。

对于lapply

lapply(list,fun)

大致相当于:

list(fun(list[[1]]),fun(list[[2]]), ... , fun(list[[length(list)]]))

您可以根据list的长度多次调用fun并将结果存储在列表中。

希望这可以澄清一点。

你可以这样做:

df <- data.frame(event.5=c(T,F), er=c(T,F), her2=c(F,T), lymph=c(F,F), grade=c(3,3) )
df <- as.data.frame(lapply(df, as.factor ))
df
##   event.5    er  her2 lymph grade
## 1    TRUE  TRUE FALSE FALSE     3
## 2   FALSE FALSE  TRUE FALSE     3
2 如何使用do.call计算R中data.frame的平均值?

我知道,我可以使用sapply和colMeans将rowMeans用作rowMeans的平均值。 但是现在,我正在学习do.call并想与do.call()一起尝试。 我尝试了不同的方法来执行此操作,但无法获得所需的结果。 例如,我想要从sapply获得相同的结果: 所以我 ...

2015-11-04 10:19:54 2 105   r/ do.call
3 使用do.call()将character和data.frame参数传递给函数

我不知道自己是否是白痴,但我正在尝试使用do.call()将参数传递给lavaan cfa()函数。 我已经使用其他函数成功完成了此操作,但是在这种情况下,参数混合了-即第一个是字符串,第二个是data.frame,第三个是字符串。 举一个简单的例子: 现在只需使用这些参数就可以了 ...

7 将 data.frame 列从因子转换为字符

我有一个数据框。 让我们称他为bob : 我想连接这个数据框的行(这将是另一个问题)。 但看: Bob的列是因子。 因此,例如: 我开始不明白这一点,但我想这些是bob caractacus 国王的法院)柱子的因子水平的指数? 不是我需要的。 奇怪的是我可以用手穿过bob的柱子,然后 ...

8 在R中使用do.call和.SD在data.table中的跨列应用函数

我正在尝试创建pmax / pmin的变体,该变体可与将使用.SD / .SDcols定义的任意列集中的其他filter_value参数一起使用。 下面的函数的第一个版本对过滤器值进行硬编码,但可与.SD一起.SD : 收益: 下面的函数的第二个版本使用了第二个filter参数 ...

9 R:expss软件包:do.call(data.frame,c(x,alis))错误:变量名限制为10000个字节

我使用expss包在R中定义了一些表函数来自动化制表。 我的一张表格想要显示类别中的案例或百分比,然后显示平均值。 平均值可以基于同一类别变量,也可以定义为另一个变量。 总体而言,该代码可以完美运行。 对于某些变量,尽管我一直在努力解决错误代码“ do.call(data.frame,c(x,ali ...

10 为什么函数rbind.data.frame在do.call中表现不同

我有一个关于do.call的问题,很奇怪 1.我想做什么 我试图将许多数据帧绑定到一个数据帧中,所有数据帧都在列表t3中,您可能会看到下面的图片: 2.方法 2.1一个人工作 t4 &lt;- do.call(rbind.data.frame, t3) ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2021 STACKOOM.COM