在 R 中 mpfr'izing data.frame
mpfr'izing a data.frame in R
我正在尝试通过乘以 mpfr 单位常数将 R 中的 data.frame 转换为 mpfr 格式。如以下代码所示,当应用于列(结果变量 'mpfr_col')时,此方法有效,但对于使用 data.frame 显示的两种方法,它不起作用。每次尝试的相关错误都列在注释中。
library(Rmpfr)
prec <- 256
m1 <- mpfr(1,prec)
col_build <- 1:10
test_df <- data.frame(col_build, col_build, col_build)
mpfr_col <- m1*(col_build)
mpfr_df <- m1*test_df # (list) object cannot be coerced to type 'double'
for(colnum in 1:length(colnames(test_df))){
test_df[,colnum] <- m1*test_df[,colnum] # attempt to replicate an object of type 'S4'
}
答案:
使用 [[colnum]]
访问列而不是 [,colnum]
:
for(colnum in length(colnames(test_df))){
test_df[[colnum]] <- m1*test_df[[colnum]]
}
(注意:data.frame
的 print
方法会失败,但是 'mpfr-izing' 可以。您可以通过单独打印列或使用 as_tibble(test_df)
来打印它.
说明
原来的失败是因为 [,colnum]
赋值没有强制转换参数,我想。使用 [[
returns 列表的一个元素(又名列)(又名 data.frame)。
查看 Hadley Wickham 的 Advanced R 书中的这一点:
- [ selects sub-lists. It always returns a list; if you use it with a
single positive integer, it returns a list of length one. [[ selects
an element within a list. $ is a convenient shorthand: x$y is
equivalent to x[["y"]].
还有来自Extract.data.frame {base}
的帮助:
When [ and [[ are used to add or replace a whole column, no coercion
takes place but value will be replicated (by calling the generic
function rep) to the right length if an exact number of repeats can be
used.
我正在尝试通过乘以 mpfr 单位常数将 R 中的 data.frame 转换为 mpfr 格式。如以下代码所示,当应用于列(结果变量 'mpfr_col')时,此方法有效,但对于使用 data.frame 显示的两种方法,它不起作用。每次尝试的相关错误都列在注释中。
library(Rmpfr)
prec <- 256
m1 <- mpfr(1,prec)
col_build <- 1:10
test_df <- data.frame(col_build, col_build, col_build)
mpfr_col <- m1*(col_build)
mpfr_df <- m1*test_df # (list) object cannot be coerced to type 'double'
for(colnum in 1:length(colnames(test_df))){
test_df[,colnum] <- m1*test_df[,colnum] # attempt to replicate an object of type 'S4'
}
答案:
使用 [[colnum]]
访问列而不是 [,colnum]
:
for(colnum in length(colnames(test_df))){
test_df[[colnum]] <- m1*test_df[[colnum]]
}
(注意:data.frame
的 print
方法会失败,但是 'mpfr-izing' 可以。您可以通过单独打印列或使用 as_tibble(test_df)
来打印它.
说明
原来的失败是因为 [,colnum]
赋值没有强制转换参数,我想。使用 [[
returns 列表的一个元素(又名列)(又名 data.frame)。
查看 Hadley Wickham 的 Advanced R 书中的这一点:
- [ selects sub-lists. It always returns a list; if you use it with a single positive integer, it returns a list of length one. [[ selects an element within a list. $ is a convenient shorthand: x$y is equivalent to x[["y"]].
还有来自Extract.data.frame {base}
的帮助:
When [ and [[ are used to add or replace a whole column, no coercion takes place but value will be replicated (by calling the generic function rep) to the right length if an exact number of repeats can be used.